2015-12-02 3 views
1

У меня есть два репозитория Git, A и B. Repo B уходит в отставку. Некоторые, но не все, его файлы должны быть объединены в ветвь A, включая их историю фиксации, возможно, по одной папке за раз. Эта ветвь в конечном итоге будет использоваться для github PR против основной ветви A, если это актуально.Как перенести часть git-репо на другое репо?

  1. Как это осуществить?
  2. Если изменения в B после слияния, но до выхода на пенсию B, как мне обновить A с этими изменениями?
+0

Зачем вам нужна история части хранилища? Не лучше просто скопировать все необходимые файлы? – Jepessen

ответ

0

Есть два случая, я знаю, что ваш случай является вторым, но я оставлю оба здесь, чтобы он мог быть полезным для кого-то другого.

Случай 1

Случай 1, когда и B доля того же происхождения (история), поэтому можно вытащить из другого, и наоборот.

На вопрос 1:

Первый тянуть репо B в .

Затем слить B в филиала «s без фиксации:

git checkout A_branch 
git merge B_branch --no-commit --no-ff 

файлы, которые вы не хотите от В появятся как новые или как новые изменения в . Удалите/отмените их.

Затем просто зафиксируйте. Таким образом, вы получаете только то, что хотите от B.

На вопрос 2:

сделать то же самое.

Случай 2

Случай 2, когда и B совершенно различны, они также различаются в структуре папок, то есть, нет никакого способа, файлы будут сталкиваться, если вы просто скопировать один папка репо на другую (хотя это не то, что мы собираемся делать).

Если это так, вы можете использовать git subtree. This blog post может дать больше информации, но в основном то, что вы хотите сделать, это, по репо :

git subtree add --prefix ./destination_folder https://your_repo.com/B.git master

Так prefix указывает папку назначения для репо B, а затем по адресу B «s а затем его ветвь.

Обратитесь к этому сообщению в блоге, если вам необходимо установить git subtree.

Другим решением этой проблемы является использование , который сочетает в себе две операции РЕПО, создающие третий, но я думаю, что ваш случай подходит лучше с git subtree, так что я просто оставлю URL here.

+0

Они не разделяют одну историю, извините. Они представляют собой полностью отдельные соглашения, которые служат для перекрытия целей; суть этого состоит в том, чтобы избавиться от одного и переместить биты, которые не дублируют работу в другую. – Andrew

+0

Правильно! Имеют ли они общие файлы или имеют полностью разные структуры папок? – Roberto

+0

Совершенно иная. Компоненты, которые я переношу, не существуют в целевом репо (именно поэтому они являются мигрируемыми частями). – Andrew

Смежные вопросы