SVN で個々のファイルをマージする方法に関する質問は以前に回答されているので、私の質問は次のとおりです。そうしても安全ですか? ある時点でブランチ全体をマージすることになった場合、SVN は特定のファイルが既にマージされていることを「取得」しますか? ブランチ全体をマージする前に変更を前後にマージするとどうなりますか?
1 に答える
はい、個々のファイルをマージすることはできますが、通常、そうするのは悪い習慣だと考えられています。
問題は、Subversion が を使用しsvn:mergeinfo
てマージを追跡することです。svn:mergeinfo
ファイルにこのプロパティがない場合svn:mergeinfo
、親ディレクトリの が使用されます。個々のファイルをあちらこちらにマージすると、それらすべてのファイルが独自のsvn:mergeifno
プロパティを取得します。
これは実際の問題を引き起こしますか? いいえ。Subversion は正常に動作します。問題は認識されているだけです。svn:mergeinfo
Subversion がプロパティを更新するたびに、そのファイルの内容が変更されていなくても、そのファイルの別のバージョンが作成されます。
これが問題になるのは、トランクをブランチにマージする場合 (またはその逆) です。次のようなコマンドを実行します。
$ svn merge http://svn.mycorp.com/svn/project/trunk .
変更された 100 以上のファイルが表示されますが、3 つまたは 4 つのファイルのみがマージされていることがわかっています。
これらのファイルを調べると、唯一の違いはsvn:mergeinfo
、最新のものをこれらのファイルにマージしたことを示すようにプロパティが変更されていることです (ファイル自体の内容は変更されませんが)。本当の問題はありません。Subversion がコミット時にこれらのファイルのプロパティを更新できるようにするだけで、すべて問題ありません。svn:mergeinfo
はい、マージを実行すると、コミットで 100 個以上のファイルが変更されたことsvn log
が示されますが、慎重に確認すると、それらのsvn:mergeinfo
プロパティのみが変更されたことが示されます。
すべきでないことは、これらのファイルを元に戻すことです。これは、変更がそれらのファイルにマージされなかったことを示します (内容は変更されていませんが)。次のマージは、以前のマージを再マージしようとし、さらに大混乱を引き起こします。
ときどき、開発者はこれを見て、変更について私に文句を言い始めます。結局のところ、ファイル自体に変更がないのに、なぜこれらのファイルが変更されるのでしょうか? svn:mergeinfo
彼らはすべての変化に不満を感じます。
そのため、個々のファイルではなく、常にプロジェクトのルートでマージすることがベスト プラクティスと見なされます。このように、プロジェクトのルートにあるディレクトリのみがsvn:mergeinfo
プロパティを取得し、プロジェクト内の他のすべてのファイルはそのsvn:mergeinfo
プロパティを使用するだけです。
あなたとあなたのすべての開発者がこれを理解し、この動作を許容する意思がある場合、個々のファイルをマージすることに問題はありません。この複雑さのために、通常は行われません。