2014-01-20 28 views
1

我配置的git使用SmartSynchronize作爲合併工具,但是當我運行git mergetool我仍然看到衝突標記,像這樣:如何配置我的mergetool不顯示衝突標記?

enter image description here (bigger version)

我用P4Merge並認爲這處理這些衝突標記,但我真的很喜歡在屏幕中間查看合併文件,如SmartSynchronize;所以我做錯了什麼或者這個工具只是無法處理衝突標記?

.gitconfig

[mergetool "smartsynchronize"] 
cmd = '/C/Program Files (x86)/SmartSynchronize 3.3/bin/smartsynchronize.exe' "$LOCAL" "$REMOTE" "$MERGED" 

(另外,如果你知道一種方法,使P4Merge顯示這樣的中間合併的文件,我很想知道)

+0

您可以添加一個屏幕截圖,顯示P4Merge如何處理同一衝突的衝突標記? – mstrap

+0

p4merge **總是等待** BASE在中間窗口和合並結果在底部 - 你可以改變順序,但它會給你合併上不好和不可預知的結果 –

+0

@LazyBadger嗨,我可以讓它看起來像上面的圖像?我不需要基礎,我想要左 - 合併 - 正確。 – Roberto

回答

1

git-mergetool調用一個三路合併工具 - 也就是說,一個工具從兩個分支和共同祖先產生合併結果。共有四個文件 - 三個輸入文件和一個輸出文件。

但是,您只用三個輸入調用mergetool:兩個分支和合併結果。因此,它使用合併結果作爲公共祖先 - git-merge已經寫入合併文件(帶有衝突標記)的文件。相反,您需要與雙方($LOCAL,$REMOTE)和共同祖先$BASE調用合併工具,告訴它將合併結果放入$MERGED

您的3路合併工具應該能夠真正區分共同的祖先和輸出文件。你應該和你的工具的作者交談,以確定這是否屬實,並向他們建議,如果他們的工具不能,他們的工具是有缺陷的。

如果你真的愛你的缺陷合併工具,但是,您可以創建一個腳本:

  • 副本$BASE到一個臨時文件
  • 調用使用$LOCAL$REMOTE和三路合併工具臨時文件
  • 檢查退出代碼是否成功以及是否成功合併,將臨時文件複製到$MERGED
  • 返回合併工具退出代碼
-1

如果您請參閱調用視覺合併時的衝突標記,這意味着只有一個:

您還沒有配置mergetools,並且內部合併被默默使用

使用SmartSynchronize如在GIT中合併工具的正確的方法是本(類型的)在~/.gitconfig.git/config代碼段(根據post in Syntevo blog

[merge] 
     tool = smartsynchronize 
[mergetool "smartsynchronize"] 
     cmd = '/C/PATH TO/smartsynchronize.exe' "$LOCAL" "$REMOTE" "$MERGED" 
     trustExitCode = false 
+0

我更新了我的* .gitconfig *,但得到了相同的結果。對你起作用嗎? – Roberto

1

此刻答案似乎是,這是不可能。我調查了爲什麼這不會發生在我的meld工具上,事實上,它曾經是。我的git版本(OS X上爲1.8.5.3)帶有一個自定義腳本,用於啓動融合,第四個參數--output允許git設置目標文件。當沒有第四個參數調用meld時,它也會在輸出中顯示衝突標記。

p4merge還支持3路合併的4個參數。

我相信SmartSynchronize的製造商將不得不改變它來支持用於解決衝突的$ BASE參數和用於輸出的$ MERGED參數。