Конвертируйте несколько репозиториев hg в один репозиторий git с несколькими ветками - PullRequest
4 голосов
/ 26 января 2011

Я переключаюсь на git из Mercurial и успешно использую hg-fast-export .Теперь у меня сложная ситуация.У меня есть проект, который использует отдельные репозитории hg для каждой ветви, и я хочу преобразовать их в один репозиторий git с «правильными» ветвями, сохраняя мои hg ​​changesets, если это возможно.

Таким образом, текущая структура выглядит следующим образом- каждая папка является репозиторием hg:

Project-v1.0
Project-v2.0
Project-v3.0

Я хочу закончить одним репозиторием git с именем «Project», который содержит 3 ветви: v1.0, v2.0 и v3.0.

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Когда репозитории hg являются клонами из одного базового репо, вы можете использовать расширение hggit , чтобы экспортировать их в одно репозиторий git.Скажем, ваши филиалы живут в каталогах b1 /, b2 / и b3 /, тогда все, что вам нужно, это

cd b1; mkdir ../gb1 && git init --bare ../gb1 && hg push ../gb1; cd ..
cd b2; mkdir ../gb1 && git init --bare ../gb2 && hg push ../gb2; cd ..
cd b3; mkdir ../gb1 && git init --bare ../gb3 && hg push ../gb3; cd ..
# now you have one git repo for each hg branch

cd gb1
git remote add gb2 ../gb2
git remote add gb3 ../gb3
git fetch --all
# now you have all branches in the gb1 repo
rm -r ../gb2 ../gb3
# the other repos are now not used anymore

Если различные репозитории hg не связаны, вы должны использовать решение для прививки, упомянутое VonC.

1 голос
/ 26 января 2011

Это должно быть возможно с:

  • создание 3 разных репозиториев Git из трех Mercurial
  • импорт Project-v2.0 истории в Project-v1.0 Git-репо (добавив Project-v2.0 в качестве удаленного и извлекая его в ветку 'v2.0': создаются 2 различных корня)
    И через точку пересадки , связывающую две ветви вместе (ветвь HEAD из v1.0 становится родителем первого коммита ветви v2.0).
  • с использованием filter-branch, чтобы сделать эти точки прививки постоянными (т. Е. Не ограничиваться вашим репо)

(повторите для Project-v3.0, извлеките первую в отдельную ветвь v3.0, привитую к ветке HEAD из v2.0 и фильтрующую ветвь, чтобы сделать трансплантат постоянным)

У вас есть похожий сценарий (хотя речь идет о "добавить некоторую историю", а не "добавить") в вопросе SO " Как добавить прошлое в репозиторий git? ".

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