git の最近のバージョンでは、構成svn.pushmergeinfo
が導入されました。
設定キー: svn.pushmergeinfo
このオプションにより、可能であれば git-svn が SVN リポジトリの svn:mergeinfo プロパティを自動的に入力しようとします。現在、これは、最初の親を除くすべての親が既に SVN にプッシュされている非早送りマージをコミットしない場合にのみ実行できます。
これを使用して、一部の開発者が SVN を使用し、一部の開発者が Git-SVN を使用する混合環境を実現しています。これは、Git で SVN ブランチを分岐およびマージしgit svn dcommit
てから SVN に戻す場合にうまく機能し、実際にはほとんどすべての場合に mergeinfo プロパティを正しく入力します。ただし、特定の状況では、これが正しく行われません。
これは主に、トランクをそのブランチにマージした後に、ブランチをマスター (トランク) にマージするときに発生します (事実上、SVN の再統合に相当します)。
トランクからブランチへのマージは、(必要に応じて) そのブランチのトランクの mergeinfo 行を追加しますが、ブランチからトランクへの reintegrate-merge は、その行をトランクの mergeinfo にコピーし、トランクの mergeinfo プロパティに自己参照行を効果的に作成します。それは自分自身を指しています。私の知る限り、この自己参照は決して起こらないはずであり、SVN を単独で使用している場合には起こりません。したがって、これは git-svn のバグだと考えています (ここで報告しました)。これにより、他の SVN ユーザーに影響を及ぼし、将来のコミットで mergeinfo が破損するという問題が発生します。
私が探しているのは回避策です:マージされるブランチのmergeinfo行をコピーしないようにgitに簡単に指示するにはどうすればよいですか、またはコミット時にこれらの自己参照を削除するようにSVNに指示するにはどうすればよいですか?自己参照の mergeinfo 行にはなりませんが、git からの自動 svn:mergeinfo 作成の他の品質は維持されます)。
(明確にするために、gitマニュアルを引用したり、「Git-SVNとのマージは危険でサポートされていません」と言ったりする人を探しているわけではありません。問題を解決できるか、別のワークフローを提案できる場合にのみ回答してください。これを解決するためのパッチを作成できるようになる可能性があるため、関連する git コードへのポインターも役立ちます。ありがとう!)