バージョン管理リポジトリの履歴を編集し、VCS 間でプロジェクトの履歴を移動するために使用できる reposurgeon というオープンソース ツールを作成し、維持しています。最近、Subversion のダンプ ファイルとリポジトリの読み取りを完全にサポートしました。しかし、reposurgeon がまだうまく機能していないことが 1 つあります。それは、git スタイルの DAG マージにコピーすることによって行われた Subversion ブランチのマージを変換することです。
この部分を正しく理解するには、git fast-import ストリームでのマージ コミットのセマンティクスを、私よりもはるかによく理解する必要があります。私の質問は、マージ コミット後に表示されるはずのコンテンツのバージョンについてです。
もちろん、マージコミットに添付されたファイルの変更により、その内容がそこに表示されます。私の質問は、コミットによって触れられていないパスに関するものです。
パスが、マージの祖先の 1 つのコミット チェーンのみにコンテンツを持っている場合、コンテンツは表示されるはずだと思います。あれは正しいですか?
パスにマージの祖先の複数のコミット チェーンのコンテンツがある場合、どのバージョンが表示されますか?
ファイルがマージへのいくつかのパスに沿って削除された場合、マージ リビジョンでいつ削除されるかを予測するルールは何ですか?