7

SVN で個々のファイルをマージする方法に関する質問は以前に回答されているので、私の質問は次のとおりです。そうしても安全ですか? ある時点でブランチ全体をマージすることになった場合、SVN は特定のファイルが既にマージされていることを「取得」しますか? ブランチ全体をマージする前に変更を前後にマージするとどうなりますか?

4

1 に答える 1

17

はい、個々のファイルをマージすることはできますが、通常、そうするのは悪い習慣だと考えられています。

問題は、Subversion が を使用しsvn:mergeinfoてマージを追跡することです。svn:mergeinfoファイルにこのプロパティがない場合svn:mergeinfo、親ディレクトリの が使用されます。個々のファイルをあちらこちらにマージすると、それらすべてのファイルが独自のsvn:mergeifnoプロパティを取得します。

これは実際の問題を引き起こしますか? いいえ。Subversion は正常に動作します。問題は認識されているだけです。svn:mergeinfoSubversion がプロパティを更新するたびに、そのファイルの内容が変更されていなくても、そのファイルの別のバージョンが作成されます。

これが問題になるのは、トランクをブランチにマージする場合 (またはその逆) です。次のようなコマンドを実行します。

$ 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プロパティを使用するだけです。

あなたとあなたのすべての開発者がこれを理解し、この動作を許容する意思がある場合、個々のファイルをマージすることに問題はありません。この複雑さのために、通常は行われません。

于 2012-10-04T16:55:47.343 に答える