これは非常に難解な質問なので、ここで最初から明確にしておくと、svn から git へ、git から mercurial へ、または mercurial から git への変換について話しているわけではありません。Mercurial が git および SVN とある程度相互運用できるようにする「クロスシステム」プラグインを利用することから生じた複雑な状況について話しています。
しばらくの間、私は hg-subversion プラグインを Mercurial に使用して、code.google.com のアップストリーム SVN リポジトリを「追跡」しました。このプラグインのおかげで、Mercurial はリポジトリが「関連」していると見なし、最後にリポジトリから取得した後に発生した変更のみを取得できます。これにより、プライベートの変更セット、ブランチ、タグなどを含む独自のプライベート Mercurial リポジトリを維持できますが、アップストリームの SVN リポジトリで発生した変更と定期的に同期およびマージされます。
アップストリーム リポジトリは、SVN から git にきれいに移動しました。はっきり言って、彼らはコミット ツリー全体、または少なくとも私が気にかけている default/master ブランチに影響を与える部分を持ってきたということです。
I am now in a situation where I have a Mercurial repository that is up-to-date merged with the very last checkin on the now-defunct SVN repository, and I want to start pulling in changes from the new upstream git repository, starting at the change that occurred just after the svn repository was moved to github.
I can use the wonderful hg-git plugin to pull changes from this repository, but as the current repository has no notion of being "related" to the git upstream repo, it will pull ALL changes, including all the changes whose mirror-image changesets are already present in my repository.
したがって、私が探しているのは、上流の git リポジトリに関連する hg-git を介して、Mercurial リポジトリに自分自身を考慮させる方法と、git リポジトリからのすべての適切なコミットを「既にプル済み」と見なす方法についてのアドバイスです。変更セットのパリティを維持する目的。
内部で hg-git がファイル .hg/git-mapfile を使用しているように見えます。これは、アップストリームの git とローカルの Mercurial リポジトリの間で変更セットをマップしていると思われます。これはおそらく手がかりです。
ローカルの Mercurial リポジトリを、基本的にアップストリームの git リポジトリのクローンとして開始したかのように動作する状態にする最も簡単な方法は何ですか?
(注: 新しいクローンで「最初からやり直して」プライベートな変更を適用するのは避けたいと思います。これは、自分のビルド/デバッグの目的でこのリポジトリの履歴の整合性を維持したいためです)。