SVNのsvn:mergeinfoを避けるにはどうすればよいですか?
質問
トランクをブランチに統合することにより、機能ブランチを最新の状態に保とうとしています。問題は、ブランチが作成されたときにそこにあった約2000のファイルであり、ブランチとトランクの両方で触れられないままにされていることは、svn:mergeinfo以外に更新されていることです。このプロジェクトの規模はかなり大きく、SVN履歴への影響は非常に大きいため、これらのファイルの唯一の変更はSVNによって行われている場合でも、文字通り数千のファイルが変更されているため、マージのコミット履歴を使用できません。自体。
私が試してみました
- リポジトリと同じクライアントバージョンを使用する(1.5.2)
- 現在のクライアントバージョン1.6.10を使用しています
- ブランチの開始から頭まで、さまざまな改訂を統合する
これを試してみると、SVNのドキュメントをよく見てきたことに言及する必要があります。したがって、ルールを破る必要はありません(例:スイッチされたサブツリー、クリーンローカルコピーなど)
解決
基本的にリポジトリをクリーンアップするには、統合ブランチで以下を実行して、そこからファンを変更する必要があります。
C:> SVN Propdel SVN:Mergeinfo –R
つまり、将来のリリースと機能の枝が汚染されないように、トランクでそれを行います。既存のブランチをマージすると、すべてのSVNを無視できます。Merginfoの変更は、とにかく継承されるように「ルート」の下に変更されます。
私はしばらく前にこの問題に関するブログを書きました。
SVNのクリーンアップ:Mergeinfoの糞http://chrisoldwood.blogspot.com/2010/03/cleaning-up-svnmergeinfo-droppings.html
他のヒント
SVNは、マージの履歴が親ディレクトリの履歴と異なると思われる場合、個々のファイルにMergeINFOプロパティを追加します。それが起こったら、 毎日 その後のマージは、どんなに無害であっても、それらのMergeInfoプロパティを更新します。前半を見つけました この記事 なぜそれが起こるのかを理解するのに役立ちます。
これらの一定のMergeInfoの変更を避けたい場合は、ブランチの既存のMergeInfoプロパティを「整理」する必要があります。最も安全だが最も面倒な方法は実行することです svn propget -R svn:mergeinfo
ブランチで、個々のファイルのMergeInfoと親ディレクトリのMergeInfoの違いを調べます。違いは小さく、少数の個別の改訂を「SVNマージ」するだけで、Mergeinfo Elisionをトリガーし、個々のMergeInfoプロパティをすべて消滅させるのに十分であることがわかります。
Mergeinfoの仕組みを理解していると確信している場合は、問題のあるファイルからMergeinfoを手動で編集または削除することもできます。
実際に変更されていないファイルにそのようなmergeinfoがある場合、または他の誰かが作業中のコピールートからではなくマージします...唯一の解決策は、SVN:Mergeinfoをファイルから削除することです。ルートをどこにもコピーしないでください。また、もう1つのポイントは、リポジトリを1.6.xに更新する必要があります。
私は盲目に自信がないので svn:merge-info
プロパティの削除では、作業コピーの現在の状況を分析し、非ルートマージINFOプロパティから可能な限り多くのマージ改訂を削除するツールを実装しました。追加の人間のチェックとコントロールの後、作業コピーの変更をコミットできます。
ここにあります: svn-clean-mergeinfo
それを改善するための使用に関する問題を報告することをheしないでください。