объединение репозиториев git на разных уровнях каталогов - PullRequest
7 голосов
/ 19 января 2012

У меня есть хранилище B, содержимое которого должно находиться в подкаталоге A ... в A / src / B. Я хочу закончить одним репозиторием A, который включает в себя историю коммитов от A и B.

Другие решения в Интернете, кажется, показывают мне, как сохранить деревья в целости в отдельных поддеревьях или объединить выбранные части репозиториев, имеющих одинаковую структуру каталогов.

Итак, есть ли способ сделать это?

1 Ответ

24 голосов
/ 19 января 2012

На самом деле это довольно просто, но команды не обязательно очевидны.Хорошая альтернатива, если вам понадобится добавить больше обновлений из B, это git-subtree (не путать со стратегией слияния поддерева).Вы говорите, что хотите получить один репозиторий, поэтому использование подмодулей git нецелесообразно.

Вот классический способ сделать это с некоторыми пояснениями:

  1. Перейдите в хранилище A:

    cd A
    
  2. Извлеките ветку master (или любую другую) из хранилища B и (временно) сохраните ее как FETCH_HEAD:

    git fetch /home/whoever/dev/B master
    
  3. Выполните слияние, которое игнорирует изменения с FETCH_HEAD, но не фиксирует.Это сделано для того, чтобы позднее мы могли зафиксировать слияние, и родители слияния будут включать FETCH_HEAD.(Этот родитель хранится в .git/MERGE_HEAD.)

    git merge -s ours --no-commit FETCH_HEAD
    
  4. Считать дерево из FETCH_HEAD (все еще извлеченной master ветви B) в стадиюобласть в подкаталоге src/B.-u означает отразить результат этого также в рабочей копии:

    git read-tree --prefix=src/B/ -u FETCH_HEAD
    
  5. Окончательно зафиксировать результат:

    git commit -m "Merge in the history of master from B into src/B"
    

Это похоже на то, что предлагается на странице справки GitHub по стратегии слияния поддерев , за исключением того, что я пропустил создание удаленного для B.Обратите внимание, что также в этой процедуре фактически не использовалась стратегия слияния поддеревьев - это было бы только для включения дальнейших изменений с B, если я правильно понимаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...