2012-11-10 40 views
1

我正在嘗試爲合併和衝突解決使用kdiff3的git編寫合併驅動程序。kdiff:合併成功

我需要一種方法來知道kdiff3在合併中是否成功。

到目前爲止,我有這樣的:

#!/bin/bash 

Kdiff3 "${1}" "${2}" "${3}" -o "${1}" --L1 "Working Copy" --L2 "Nearest Common ancestor" --L3 "Version from Other Branch" 

exit 1 

由於出口1告訴Git的合併是否成功與否,我想基於kdiff3的成功來設置。

有沒有辦法做到這一點,我完全失蹤?

+1

離開關閉'exit 1',但不應該使用kdiff3作爲合併驅動程序,它是由'git mergetool'原生支持的交互式衝突解決工具。你試圖通過合併驅動程序來實現什麼? –

+0

嘿克里斯,我試圖做一個合併驅動程序,它會顯示我想要做的所有更改。我發現Git的內部automerge並不是檢測動作的最佳選擇,所以我想在接受它之前先查看gui中的所有代碼和更改。上面的腳本幾乎完全符合我想要的,我只是想根據用戶是否成功合併文件來確定退出。之前,我只是在想這個文件。思考? – TechplexEngineer

回答

1

您可以告訴我們,如果自動合併通過檢查輸出已被寫入由kdiff3,如this thread

提到如果沒有明確指定輸出文件(通過-o)工作,然後將第三個(最後一個)文件將成爲目的地。

合併後輸出文件成功保存時退出狀態爲0。
和1如果您不保存就退出。

這就是this script正在測試(做爲一個例子),但使用diff3
(含kdiff3 command-line options,如果您需要在-auto選項添加到您的命令行)

echo "Attempting to auto-merge ${baseFileName}" 1>&2 
    diff3 -L $labelMine -L $labelOlder -L $labelTheirs -Em $mine $older $theirs > $output 
    if [ $? = 1 ]; then 
     #Can't auto merge 
     rm -f $output 
     $VDIFF3 $older $mine $theirs --L1 $labelOlder --L2 $labelMine --L3 $labelTheirs -o $output --auto 1>&2 
     bLoop=1 
     if [ -f $output ]; then 
      if [ -s $output ]; then 
       #output succesfully written 
       bLoop=0 
      fi 
     fi 
     if [ $bLoop = 0 ]; then 
      cat $output 
      rm -f $output 
      exit 0 
     else 
      echo "Merge failed, try again" 1>&2 
     fi 
    else 
     #We can automerge, and we already did it 
     cat $output 
     rm -f $output 
     exit 0 
    fi 
    ;; 
+0

我不知道你是否可以解釋這個腳本是如何檢查輸出文件是否改變? – TechplexEngineer

+0

@TechplexEngineer腳本只是檢查是否有*是*輸出。如果不是,那意味着不可能自動合併。 – VonC