Это довольно эзотерический вопрос, поэтому просто поясню здесь с самого начала: я не говорю о преобразовании 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 upstream, он будет тянуть ВСЕ изменения, включая все изменения, чье зеркало -имения наборов изменений уже присутствуют в моем хранилище.
Итак, я ищу совет, как заставить мой репозиторий Mercurial считать себя через hg-git связанным с вышестоящим репозиторием git, а также считать все соответствующие коммиты из репозитория git уже "как" потянул "в целях поддержания четности набора изменений.
Я вижу, что внутренне hg-git, похоже, использует файл .hg / git-mapfile, который, я полагаю, отображает наборы изменений между вышестоящим git и локальным репозиторием Mercurial. Это, вероятно, ключ.
Какой самый простой способ перевести мой локальный репозиторий Mercurial в такое состояние, когда он по сути ведет себя так, как если бы он начинался как клон вышестоящего репозитория git, но поддерживает все мои собственные несвязанные наборы изменений, которые были добавлены со временем?
(Примечание: я бы предпочел не «начинать заново» со свежим клоном, а затем применять свои личные изменения, потому что я хочу сохранить историческую целостность этого хранилища для своих собственных целей сборки / отладки).