Объединение двух разных репозиториев

У меня есть 3 репозитория, A, B и C, все они связаны с одним проектом. A - самая старая версия проекта, B - эксперимент, который на самом деле никуда не делся, а C - последняя рабочая версия. Все эти репозитории имеют разные файлы - это разные реализации одного и того же продукта.

Я хотел бы объединить эти 3 репо в одно, сохраняя их историю - это жизненно важно. Я предполагаю, что хочу поместить B поверх A и C поверх B, но когда я оформляю проект, я хочу получить только изменения, связанные с репо C.

Моя идея состоит в том, чтобы пометить или создать именованную ветку на A, hg rm *, зафиксировать, а затем сложить B сверху. Повторите то же самое с B, чтобы я мог сложить C и затем продолжить проект как обычно.

Как вы думаете? Также немного вдохновения для того, что я хочу сделать: 1, 2.

1 ответ

Решение

Вы можете просто вытащить наборы изменений в один большой репозиторий. Начните с репо:

$ hg init combined
$ cd combined
$ hg pull ../A
$ hg update

Затем принудительно вытяните B и соедините две головки, чтобы сохранить файлы из B:

$ hg pull ../B --force
$ hg merge --tool internal:other
$ hg revert --all --rev tip
$ hg commit -m "Merge A and B, kept B"

Затем повторите для C:

$ hg pull ../C --force
$ hg merge --tool internal:other
$ hg revert --all --rev tip
$ hg commit -m "Merge B and C, kept C"

Это дает вам три линии истории и точку слияния, где вы сначала отбрасываете A, затем B и, наконец, получаете C.

В качестве альтернативы вы можете использовать расширение convert с картой сплайсинга, чтобы объединить три истории вместе. Начните с принудительного извлечения всех наборов изменений в один репозиторий. Затем выполните преобразование Mercurial в Mercurial, где вы добавляете кончик A в качестве первого родителя корня B. Аналогично для B и C. Это дает вам одну длинную историю, в которой произойдет очень резкое изменение, когда вы перейдете от A к B и от B до C.

Я бы выбрал первый вариант: он наиболее явный и лучше всего показывает, что происходит без фальсификации (преобразования) истории.

Другие вопросы по тегам