2

私はサブディレクトリのマージがなぜ悪いのかについていくつかの調査を行い、最近、mergeinfoを含むリポジトリ内のサブディレクトリを発見しました。

このマージ情報を手動で削除しようとしていますが、mergeinfoを正しく理解し、正しく実行しているかどうかを確認したいと思います。

ROOTDIR mergeinfo

/ branchs / Iteration53:18065-18126

/ branchs / Iteration54:18150-18204,18210-18231

/ branchs / Iteration55:18341,18348,18353-18355,18357,18364-18365<=====この行は異なります

/ branchs / gdsRework:17329-17457

/ trunk:17869,18085

SUBDIR mergeinfo

/ branchs / Iteration53 / kiwi-web:18065-18126

/ branchs / Iteration54 / kiwi-web:18150-18204,18210-18231

/ branchs / Iteration55 / kiwi-web:18336-18428<=====この行は異なります

/ branchs / gdsRework / kiwi-web:17329-17457

/ trunk / kiwi-web:17869,18085

2つの間で異なる行は1つだけです。また、SUBDIR mergeinfoの範囲18336-18428には、ROOTDIRmergeinfoの同じ行のすべてのリビジョンが含まれていることに気付きました。

したがって、私の計画は、ROOTDIRのその行をSUBDIRの行に置き換え、SUBDIRmergeinfoをすべて一緒に削除することです。

新しいROOTDIRmerginfo

/ branchs / Iteration53:18065-18126

/ branchs / Iteration54:18150-18204,18210-18231

/ branchs / Iteration55:18336-18428 <=====SUBDIRmergeinfoと同じになりました

/ branchs / gdsRework:17329-17457

/ trunk:17869,18085

SUBDIRmergeinfoが削除されます。

これは安全ですか?落とし穴はどこにありますか?前もって感謝します。

4

1 に答える 1

3

mergeinfo を手動で編集することはお勧めしません。過去に私はあなたが説明したようなことをしましたが、ルートとサブディレクトリの違いがより複雑であっても、そのような編集は非常にエラーが発生しやすいため、細心の注意と正確さが必要です. 後で知ったように、SVN はそのような状況をかなり簡単に修正するのに十分強力です。したがって、mergeinfo を手動で編集する習慣さえ身につけない方がよいでしょう。

単純なケースは、SUBDIR mergeinfo に記録された「余分な」リビジョンがそのサブディレクトリにのみ影響する場合です。この場合、必要なのは ROOTDIR レベルでリビジョン 18336 から 18428 のレコードのみのマージを行うことだけです。レコードのみのマージは、ファイルに触れることなく ROOTDIR の mergeinfo を更新し、SUBDIR の mergeinfo は ROOTDIR の場合とまったく同じになるため、それを余分なものとして削除します。

  • SVN コマンドを直接使用する場合は、実際のマージに使用するコマンドに--record-onlyオプションを追加するだけです。svn merge
  • GUI クライアントを使用している場合は、マージ ダイアログで「レコードのみ」または同様の名前のオプションを探します。

mergeinfo の範囲 (両端とその間のすべてを含む) と-rオプションの範囲 (差分をとる 2 つのリビジョンを指定する) の違いに注意してください。たとえば、コマンド ラインで を指定する必要があります-r 18335:18428。つまり、差分を取得する開始リビジョンは、マージする最初のリビジョンよりも 1 つ少なくなります。

より複雑なケースは、これらのリビジョンが SUBDIR にマージされ、ROOTDIR にはマージされず、SUBDIR の外部のファイルも変更する場合です。これらの変更がまだマージされていない可能性が非常に高いです。これらの変更を無視しても安全な場合は、レコードのみのマージを行うこともできます。逆に、これらの変更が見逃された場合は、ROOTDIR レベルでリビジョンの定期的なマージを行い、マージの競合があれば修正する必要があります。

マージ (レコードのみまたは通常のいずれか) が完了したら、ディレクトリの mergeinfo が適切に変更されていることを確認し、結果をコミットします。

私が mergeinfo と SVN コマンド (レコードのみのマージ、mergeinfo elision などを含む) によってどのように操作されるかについて多くを学んだ良い記事は、ここにあります: Subversion 1.5 Mergeinfo - Understanding the Internals。リポジトリでmergeinfoを修正する前に、それを読むことをお勧めします.

于 2012-11-02T22:34:41.213 に答える