Объедините два одинаковых удаленных репозитория git в одно - PullRequest
15 голосов
/ 01 июня 2011

Я провел несколько поисков и прочитал git book и некоторые места в Интернете, например git, но не могу найти правильный способ сделать это.

У меня есть два репозитория git, которые установлены на двух разных машинах.Каждое из этих git-репозиториев содержит конфигурацию для программы.При сравнении двух репозиториев некоторые части конфигурации идентичны, а некоторые - нет.

Мы хотим создать третий репозиторий и объединить содержимое двух других репозиториев с новым.Я надеюсь, что благодаря этому у меня будет один репозиторий, содержащий все данные из двух других репозиториев, но только одну его копию.Таким образом, мы надеемся, что git расскажет нам, что отличается между двумя репозиториями, и объединит эти изменения в одно.

Надеюсь, это достаточно просто понять.

Я попытался создать новое git-репо, сделать git-клон одного сервера, создать новую ветку и сделать git-клон другого репо.затем просит Git объединить их.Я также пробовал объединение поддеревьев, и ни один из них не дал того, что я хотел.

В первом примере просто сказано удалить все файлы и добавить кучу новых файлов.Это не то, что мы хотели, мы хотели иметь один репозиторий git, содержащий одну копию конфигурации, созданную в результате слияния двух удаленных репозиториев.

Если кто-то может помочь с этой проблемой, это было бы очень полезно.

Кстати, данные обоих репо состоят из одних и тех же файлов с одинаковыми именами, но немного отличающимся содержанием.

Ответы [ 3 ]

21 голосов
/ 01 июня 2011

Если мы предположим, что репозитории называются A и B, вы могли бы начать с клонирования A или B в C:

$ git clone git://path/to/A.git

Теперь C идентично A (а A является источником C).Теперь мы можем добавить B в качестве удаленного к C и создать masterB ветви отслеживания, которая отслеживает главную ветвь B:

$ git remote add B git://another/path/to/B.git
$ git fetch B
$ git checkout --track masterB B/master

Теперь главная ветвь C такая же, как главная ветвь A и masterBОтветвление совпадает с master на B. Теперь мы можем объединить masterB с master:

$ git checkout master
$ git merge masterB
$ .. solve conflicts

Если вам не нужно отслеживать исходные репозитории, мы можем выполнить очистку с помощью:

$ git remote rm origin
$ git remote rm B
$ git branch -d masterB
0 голосов
/ 05 сентября 2017

Объединить 2 одинаковых репо в одно довольно просто.

  1. создать голое репо

  2. git добавить удаленное репо1 в голое репо

  3. git слияние мастера репо1 с голым репо

  4. git добавление удаленного репо2 в голое репо

  5. git merge master of repo2 в голое хранилище

  6. git rm remote для repo1 и repo2

  7. отправка пустого хранилища на сервер.

0 голосов
/ 01 июня 2011

У вас будет 2 разных ветки из обоих репо. Допустим, они

repo1/master
repo2/master

Я бы просто слил их и разрешил конфликты, чтобы он представлял одну из репозиториев. Затем я бы снова сделал слияние, и на этот раз выбрал другое репо в качестве основного в случае каких-либо конфликтов. Теперь у вас будет:

common1
common2

ветви. Объединить common2 в common1 со стратегией «наша». Теперь сделайте то же самое с другим. Это захватит общую точку в истории и предотвратит возникновение проблем при последующих объединениях. По сути это означает, что один видит другого как ветку разработки.

надеюсь, это поможет.

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