Можно ли объединить два одинаково структурированных репозитория git, если у них никогда не было общей истории? - PullRequest
8 голосов
/ 16 марта 2009

У меня есть два маленьких репозитория git. Оба проекта начинались с разных точек, но сходились к очень похожему (одинаковые имена файлов, структура папок и т. Д.). Один не является ветвью другого, но одного можно считать эволюцией другого.

Было бы неплохо, если бы я мог объединить их так, чтобы repo2 было продолжением repo1. Возможно ли это, добавив историю repo2 в конец repo1?

1 Ответ

6 голосов
/ 16 марта 2009

Вы можете получить одно в другое :

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

Это даст вам две (или более) ветки, содержащие историю проекта1 и проекта2. Они все еще полностью независимы, просто используйте одно и то же хранилище объектов.

Тогда (не проверено), вы можете использовать графт-файл (.git/info/grafts), в котором вы можете перезаписать родительский элемент коммита (как первый из project2 с родительским последним из project1)

Как говорит Дастин в комментариях, для того, чтобы «сделать его постоянным», необходимо выполнить ребазинг путем воспроизведения коммитов project2 на project1.


У вас есть еще одна иллюстрация в этой записи в блоге " Использование Git в проекте (развлечение) * ", особенно в разделе "Как заводить друзей и влиять на людей". Опять же:

git checkout two_point_ooh
git remote add strelau git://gitorious.org/ruby-on-rails-tmbundle/mainline.git
git checkout -b strelau/two_point_ooh
git pull strelau two_point_ooh

аналогичный процесс, но для разветвленных репозиториев (что не совсем так)

...