Как связать существующие репозитории Mercurial и git с помощью hg-git?

Это довольно эзотерический вопрос, поэтому просто чтобы прояснить здесь с самого начала: я не говорю о преобразовании из svn в git, git в mercurial или mercurial в git.Я говорю о сложной ситуации, которая возникла из-за использования преимуществ «межсистемных» плагинов, которые позволяют Mercurial до некоторой степени взаимодействовать с git и SVN.

Некоторое время я использовал плагин hg-subversion для Mercurial для «отслеживания» репозитория SVN на code.google.com. Благодаря этому плагину Mercurial считает репозиторий «связанным» и может извлекать только те изменения, которые произошли с тех пор, как я последний раз извлекал данные из репозитория. Это позволяет мне поддерживать свой собственный частный репозиторий Mercurial, который включает частные ревизии, ветки, теги и т. Д., Но который периодически синхронизируется и объединяется с изменениями, происходящими в репозитории SVN восходящего направления.

Репозиторий восходящего потока полностью переместился с SVN на git. Когда я говорю чисто, я имею в виду, что они взяли с собой все дерево коммитов или, по крайней мере, ту часть, которая влияет на ветвь default / master, которая мне небезразлична.

Я сейчас нахожусь в ситуации, когда у меня есть репозиторий Mercurial, который обновлен до последней версии, слитый с самой последней проверкой в ​​ныне несуществующем репозитории SVN, и я хочу начать извлекать изменения из нового вышестоящего репозитория git , начиная с изменения, которое произошло сразу после того, как репозиторий svn был перемещен на github.

Я могу использовать замечательный плагин hg-git для извлечения изменений из этого репозитория, но поскольку текущий репозиторий не имеет понятия «связанный» с репозиторием вышестоящего уровня git, он будет извлекать ВСЕ изменения, включая все изменения, зеркальные Набор изменений -image уже присутствует в моем репозитории.

Я ищу совет, как заставить мой репозиторий Mercurial считать себя через hg-git связанным с вышестоящим репозиторием git, а также рассматривать все соответствующие коммиты из репозитория git как «уже вытащил "в целях поддержания четности набора изменений.

Я вижу, что внутри hg-git, похоже, используется файл .hg / git-mapfile, который, как я полагаю, сопоставляет наборы изменений между вышестоящим git и локальным репозиторием Mercurial. Вероятно, это ключ к разгадке.

Какой самый простой способ привести мой локальный репозиторий Mercurial в такое состояние, при котором он по сути ведет себя так, как если бы он был запущен как клон вышестоящего репозитория git, но поддерживает все мои собственные несвязанные наборы изменений, которые были добавлены с течением времени?

(Примечание: я бы предпочел не «начинать заново» со свежим клоном, а затем применять мои частные изменения, потому что я хочу сохранить историческую целостность этого репозитория для моих собственных целей сборки / отладки).

18
задан danielpunkass 21 September 2011 в 14:48
поделиться