6

トランクをブランチにマージすることにより、機能ブランチを最新の状態に保とうとしています。問題は、ブランチが作成されたときにそこにあり、ブランチとトランクの両方で変更されていない約2000個のファイルが、svn:mergeinfoだけで更新されていることです。プロジェクトはかなり大規模であり、SVN履歴への影響が非常に大きいため、これらのファイルへの唯一の変更はSVNによって行われるにもかかわらず、文字通り何千ものファイルが変更されたとマークされるため、マージコミット履歴が使用できなくなります。自体。

私が試してみました

  • リポジトリと同じクライアントバージョンを使用する(1.5.2)
  • 現在のクライアントバージョン1.6.10を使用
  • ブランチの開始からヘッドまで、さまざまなリビジョンをマージします

これを試すとき、私はSVNのドキュメントを注意深く見ていました。したがって、ルールを破ってはなりません(たとえば、サブツリーの切り替え、ローカルコピーのクリーンアップなど)。

4

4 に答える 4

8

基本的に、リポジトリをクリーンアップするには、統合ブランチで次のコマンドを実行して、変更がそこからファンになるようにする必要があります。

C:> svn propdel svn:mergeinfo –R

つまり、将来のリリースと機能のブランチが汚染されないように、トランクでそれを行います。既存のブランチをマージするときは、とにかく継承されるため、「マージルート」の下にあるすべてのsvn:merginfoの変更を無視できます。

私はしばらく前にこの問題についてブログを書きました。それはそれをより詳細にカバーしています:-

svn:mergeinfoDroppingsのクリーンアップ http://chrisoldwood.blogspot.com/2010/03/cleaning-up-svnmergeinfo-droppings.html

于 2010-09-24T13:54:50.763 に答える
6

svnは、マージ履歴が親ディレクトリの履歴と異なると判断した場合、mergeinfoプロパティを個々のファイルに追加します。それが発生すると、その後のすべてのマージは、どんなに無害であっても、それらのmergeinfoプロパティを更新します。この記事の前半は、なぜそうなるのかを理解するのに役立ちました。

これらの一定のmergeinfoの変更を回避したい場合は、ブランチの既存のmergeinfoプロパティを「整理」する必要があります。最も安全ですが、最も面倒な方法はsvn propget -R svn:mergeinfo、ブランチで実行してから、個々のファイルのmergeinfoとその親ディレクトリのmergeinfoの違いを調べることです。違いはわずかであり、少数の個別のリビジョンを「svnマージ」するだけで、mergeinfoの削除がトリガーされ、個々のmergeinfoプロパティがすべて表示されなくなる場合があります。

mergeinfoがどのように機能するかを理解していると確信している場合は、問題のファイルからマージ情報を手動で編集または削除することもできます。

于 2010-09-24T11:09:29.720 に答える
1

実際に変更されていないファイルにそのようなmergeinfoがある場合、または他の誰かが作業コピールートからではなくマージを行う場合...唯一の解決策は、ファイルからsvn:mergeinfoを削除することです。これは、作業中の場所のみが原因です。ルートを他のどこにもコピーしません。そしてもう1つのポイントは、リポジトリを1.6.Xに更新する必要があります。

于 2010-09-24T11:04:57.857 に答える
0

ブラインドsvn:merge-infoプロパティの削除に自信がないため、作業コピーの現在の状況を分析し、ルート以外のmerge-infoプロパティから可能な限り多くのマージリビジョンを削除するツールを実装しました。追加の人間によるチェックと制御の後、作業コピーの変更をコミットできます。

ここにあります:svn-clean-mergeinfo

それを改善するために、その使用法に関する問題を報告することを躊躇しないでください。

于 2015-03-09T11:17:09.557 に答える