TortoiseSVNマージを実行すると、実際の変更はありませんが、多数のディレクトリと、変更されたファイルにいくつかのファイルが含まれます。
プロパティsvn:mergeinfo
を変更します。
ディレクトリ/ファイルに設定されたこれらのプロパティが必要な理由はありますか?これらの変更をsvn:mergeinfo
にしないで回避する方法はありますか?
通常、アイテムを元に戻してからコミットしますが、これは余分な時間を無駄にします。
これらのファイルとディレクトリには、前回のマージで設定されたsvn:mergeinfoプロパティが設定されているため、これが発生する可能性が非常に高くなります。一般的に、mergeinfoが個々のファイルに書き込まれるような方法で個々のファイルまたはディレクトリをマージすることは良い考えだとは思いません。 mergeinfoプロパティが/ trunkや/branches/1.0などの構造ディレクトリでのみ設定されるように、ワークフローで可能な限り最高レベルでマージする習慣を身に付ける必要があります。
ただし、個々のファイルとフォルダーのmergeinfoプロパティに気付いた場合、2つの方法があります。最初のことは、問題のファイルとディレクトリからsvn:mergeinfoプロパティを削除することです。自分が何をしていて、どのような影響があるのかを本当に理解していない限り、これが推奨されるかどうかはわかりません。これを行う前にドキュメントを読んでください!
2番目にできることは、SVNが望む方法でプロパティの変更をコミットすることです。これは、ソフトウェアを信頼する場合、おそらく正しいことです。
そうは言っても、私はチームメイトと協力して正しい習慣を身につけ、このような煩わしさがなくなるようにしています。
これはSVN 1.7で修正されるはずです。 リリースノート から:
サブツリーがマージの影響を受けなかった場合、マージはサブツリー(独自の明示的なmergeinfoを持つ)にmergeinfo(マージを記述する)を記録しなくなりました。これにより、明示的なmergeinfoを持つ多数のサブツリーを持つユーザーの偽の
svn:mergeinfo
プロパティ変更の数が大幅に削減されます。
何が起こるかというと、ファイル/フォルダーに明示的なmergeinfoがあると、ファイル/フォルダーが無関係であっても、ブランチへの以降の各マージはそのmergeinfoを更新します。これは、各マージのチェンジリストにますます混乱を招くため、迷惑です。
これを回避するには、ブランチの「ルート」フォルダー(「/branches/maintenance2.x」など)にのみマージします。 「/branches/maintenance2.x」の下のファイルまたはフォルダはどれもmergeinfoを取得しないはずです。 SVNブックのマージアドバイス に従ってください。
残念ながら、ブランチの「ルート」フォルダでのみマージしても、個々のファイルおよびフォルダをコピーすると、兄弟と同じマージを受信していないことを示すために、空のsvn:mergeinfo
プロパティが引き続き表示されます。
おそらく、余分なサブツリーmergeinfoを削除しても安全です。これを行う1つの方法は、プロジェクトルートの各ファイルとフォルダーでsvn:mergeinfo
プロパティを再帰的に削除することです。 (ただし、ルートフォルダ自体にmergeinfoを保持してください!)
または、 Subversion 1.6 にアップグレードできます。この問題が修正されることを確認しました。以前のバージョンで追加された余分なmergeinfoも削除するようです。
コメントから判断すると、SVN 1.6にはまだ余分なサブツリーmergeinfoが表示される場合があります。しかし、私はそれを再現することができませんでした。
--ignore-ancestryオプションを使用してマージを行う場合、mergeinfoプロパティは最初に作成されません。
svn merge --ignore-ancestry -c 1234 svn://sourcecontrol .
Ignore ancestryにチェックマークを付けると、フォルダーにsvn mergeinfoが作成されません。 svn merge情報を既に取得している場合は、それを元に戻して、祖先を無視することをチェックして再度マージを実行します。
svn:mergeinfoは、Subversionが マージ履歴の追跡 に使用するプロパティです。私はそれがやるべきことをやらせるだけです...あなたは後でマージ履歴の追跡が必要になる可能性があり、それらのプロパティをコミットしなかったために機能しないことがわかります。
Stack Overflowの質問 Remove不要なsvn:mergeinfoプロパティ で指定されたコマンドは、余分なmergeinfoを削除します。
From the root of the project do:
svn propdel svn:mergeinfo -R
svn revert .
svn ci -m "Removed mergeinfo"
このバグの少なくとも一部がSubversion 1.5.5で修正されたことを追加します。 1.5.5 CHANGESファイル から:
do not create mergeinfo for wc-wc moves or copies (r34184, -585)
つまり、1.5より前のSVNには、使用しないmergeinfoエントリが作成され、余分なバグがありました。これは、元の質問者がsvn:mergeinfo
プロパティ。
素晴らしい質問と回答!自動化されたビルドシステムの制限を回避しようとしているため、最近この問題が発生しています。ビルドシステムは、バージョン情報とパス情報を使用して、.bdsprojファイルと一部の.dpr/.dpkファイルを自動インクリメントします。
私はそれを変更したい...しかし、今、あなたが1つのブランチを別のブランチとマージしたい場合、あなたはあなたが変更した少数のファイルを手に入れ、それからビルドマシンが変更した1000ファイルを手に入れる。そのため、一度に1ファイルずつ「ターゲット」マージを行ってきました。特に、正当な変更(余分なユニットの追加など)がある.dprまたは.bdsprojファイルの場合。今、私は何が起こっているかを知っているので、私はうまくいけば狂気を止めることができます。
Stack Overflowに感謝します!
ほぼすべてのファイルにこの情報が含まれていたため、マージが非常に面倒だったため、プロジェクトで再帰的に削除しました(1つのファイルのみが変更された場合、すべてのファイルをマージする必要がありました)。これからはルートでのみマージします。これは将来この状況を回避するはずです。
今のところ問題はありません。ロギングはファイルで引き続き利用可能であり、同じように見えます(ただし、とにかく自己責任で行ってください!)。
ああ、新しいブランチを作成する直前に、トランクでそれをしました。このようにして、きれいな状態から始めることができます。
私たちのチームにもこの問題があり、マージプロセス全体が少し混乱しました。これを読んだ後、私はいくつかのファイルからsvn:mergeinfoプロパティを削除してみましたが、さらにテストを重ねた結果、問題が解決したようです。