Могу ли я объединить два репозитория Git с похожим контентом, но без общего происхождения? - PullRequest
15 голосов
/ 17 июля 2009

У меня есть две кодовые базы, кодовая база-1, кодовая база-2.

Я запускаю команды ...

git init
git add .
git commit -m "Initial Commit"

... в обоих репозиториях (каталогах).

Между кодом base-1 и кодом base-2 имеются различия в кодах.

Я не могу их разветвлять, потому что они уже содержат различия примерно на 0,1%. Имена файлов совпадают, но в коде есть небольшие изменения.

Есть ли способ объединить различия между двумя хранилищами?

Отредактировано:

Например, допустим, у меня есть следующее. Это то, с чего я начинаю. Есть небольшие различия между кодовой базой 1 и 2.

[oldest code case] 
code-base-1/ 
code-base-1/.git  [git stuff with already created repo] 
code-base-1/file1 
code-base-1/file2 

code-base-2/ 
code-base-2/.git [git stuff with already created repo] 
code-base-2/file1 
code-base-2/file2 

В идеале я мог бы удалить code-base-2, потому что он немного новее.

Как мне объединить эти кодовые базы, чтобы в итоге я получил одну с объединенными файлами?

Ответы [ 3 ]

8 голосов
/ 17 июля 2009

Проблема может быть связана с тем, что это два разных репозитория (с другим первым узлом SHA-1), а не один репозиторий, клонированный и затем модифицированный.
Это означает, что 'git fetch', вероятно, недостаточно.

Вы можете просто использовать внешний инструмент (внешний по отношению к Git), чтобы объединить контент CB2 (Code-Base-2) в CB1, например WinMerge, как предложено в вопросе " Слияние изменений извне git-репозитория".

Другим вариантом будет использование некоторой техники прививки для завершения выборки: см. Вопрос " Можно ли объединить два одинаково структурированных репозитория git, если у них никогда не было общей истории? "

$ cd project1
$ git config remote.project2.url /path/to/project2
$ git config remote.project2.fetch 'refs/heads/*:refs/project2/*'
$ git fetch project

Плюс измените файл трансплантата (.git/info/grafts), чтобы связать коммиты проекта2 с проектом1.

4 голосов
/ 17 июля 2009

Попробуйте:

cd code-base-1
git fetch ../code-base-2 master:code-base-2
git merge code-base-2
0 голосов
/ 17 июля 2009

Создайте первый репозиторий, как вы описали.

Во второй папке создайте файл с именем ".git" с содержанием:

gitdir: <path-to-first-repository>/.git

Во втором хранилище вы можете запустить git diff, git add / commit и т. Д., Чтобы объединить ваши изменения.

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