2011-06-17 15 views
3

次のケースが見つかりました。隣接行のMercurialマージ競合

$ hg init 
$ echo ' 
> line 1 
> line 2 
> ' > file.txt 
$ hg add file.txt 
$ hg commit -m 'added' 
$ echo ' 
> line 11 
> line 2 
> ' > file.txt 
$ hg commit -m 'changed line 1' 
$ hg update 0 
$ echo ' 
> line 1 
> line 21 
> ' > file.txt 
$ hg commit -m 'changed line 2' 
$ hg merge 1 

結果:

マージfile.txtを失敗しました!

HG差分はfile.txt

diff -r bc62305d407b file.txt 
--- a/file.txt Fri Jun 17 22:53:22 2011 +0300 
+++ b/file.txt Fri Jun 17 22:53:46 2011 +0300 
@@ -1,4 +1,9 @@ 

+<<<<<<< local 
line 1 
line 21 
+======= 
+line 11 
+line 2 
+>>>>>>> other 

我々は上記のシナリオをしようとするが、3行と変更を1と2のライン上にある、マージは成功します。 なぜ、これが起こっているのか、私の質問ですか?これはマージアルゴリズムなどの問題ですか?

答えて

2

Mercurialは、人間が解決しなければならない競合があるため、自動的にはマージできません。マージされたバージョンが優先さを取ることができる権威としてマージの片側を考慮していない

line 1 
line 21 

または

line 11 
line 2 

のMercurialを含まなければならない場合、どのようMercurialは知っている必要があります。 file.txtのマーカーは、あなたの手が必要なMercurialのヒントです。

ただし、このようなファイル内マーカーは、競合時にconfiguring an interactive merge toolでは使用できません。また、this related questionをご覧ください。

+1

コメントについてのお詫び。 しかし、私にとっては、これは本当に質問に答えるものではありません。 コミットr1では最初の行のみが変更され、r2では2番目の行が変更されました。 私はこれを_get_ thisにしてファイルの内容を自動的にマージすると期待しています: 'line 11' ' line 21' – Carsten

関連する問題