Как объединить две ветви из двух разных репозиториев в одном репозитории? - PullRequest
47 голосов
/ 28 октября 2008

Структуры моих Git-репозиториев выглядят так:

A-B-C-D-E-F   # master branch in separate repo1
A-B-C-D-E-G-H # master branch in separate repo2

A-H - простые коммиты. Как вы можете видеть, репозитории связаны (repo2 - это форк repo1). Я пытаюсь объединить эти два хранилища в одном.

Впоследствии один репозиторий должен иметь следующую структуру:

A-B-C-D-E-F   # master branch of previous repo1
        \
         \
          G-H # master branch of previous repo2

Я уже потратил много времени на чтение Руководства пользователя Git и так далее. Однако этот (особый) случай использования, похоже, нигде не документирован.

Ответы [ 3 ]

71 голосов
/ 29 октября 2008

Вы можете рассматривать другой репозиторий git в той же файловой системе, что и удаленный репо.

В первом случае сделайте следующее:

git remote add <name> /path/to/other/repo/.git
git fetch <name>
git branch <name> <name>/master #optional

Теперь они обе ветви в одном хранилище. Вы можете переключаться между ними с помощью git checkout, слияния с git merge и т. Д.

6 голосов
/ 28 октября 2008

Ваша картинка говорит о том, что вы на самом деле не хотите «объединять два репозитория» настолько, насколько слияние фиксирует G и H в repo1. Вы должны быть в состоянии сделать что-то столь же простое, как добавить repo2 в качестве удаленного к repo1 и получить / вытащить изменения.

3 голосов
/ 28 октября 2008

Я думаю, что Джим прав. Также имейте в виду, что если два коммита делают одинаковый патч / diff для кода, они будут иметь точно такой же хэш SHA1. Таким образом, от A до E должны иметь один и тот же SHA1 в обоих репо, поэтому не должно быть проблемой слияния одного с другим и сохранение объединенного репо в качестве единственного репо для дальнейшего продвижения.

Вы можете настроить в repo1 ветку отслеживания для repo2, а затем сохранить их таким образом и задержать объединение в любое время.

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