これはgitのみの動作ですか?
同僚と話し合った後、試してみたところ、SVNは問題なくそれを処理しました。2行を修正しました。
いくつかのVCSのマージ機能は、bazaar、darcs、git、mercurialについてここでテストされています:https : //github.com/mndrix/merge-this
darcsのみが「隣接行」のケースを正常にマージしているようです。
ファイルに隣接する変更を適用することは難しい問題ではありません。私はこの行動が意図的に選ばれたと本当に思っています。
隣接する行を変更すると競合が生じると誰かが判断するのはなぜですか?
これはあなたにそれを見させることだと思います。
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
マスター上のModif番号1:
int max = MAX_ITEMS/2; // Do stuff only on the first half
for(unsigned int i = 0; i < max; i++)
do_stuff(i);
ブランチからマージされたModif番号2:
int max = MAX_ITEMS;
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
マージ後、それは望ましくありません:
int max = MAX_ITEMS/2; // Do stuff only on the first half
for(unsigned int i = 0; i < max/2; i++) // max/2: only on 1st half
do_stuff(i);
この動作を機能として見る
gitマージの動作を有利にすることができます。2行の一貫性を保つ必要があるが、それを検出できない場合(コンパイル時、テストの早い段階など)、それらを結合しようとすることができます。
これを書き換えます...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
// Need to do something else
do_something_else(r);
...これに:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
do_something_else(r); // Need to do something else
Modif 1をマージすると...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i)/2; // we need only the half
do_something_else(r); // Need to do something else
... Modif 2で...:
for(unsigned int i = 0; i < max; i++)
r = do_stuff(i);
if(r < 0) // do_stuff can return an error
handle_error(r);
do_something_else(r/2); // Need to do something else
...、gitは競合を生成し、それを強制的に確認します。