雖然 Git 自己實作了diff,而且到目前為止你一直在使用它,但你能夠用一個外部的工具替代它,除此以外,你還能用一個圖形化的工具來合并和解決沖突進而不必自己手動解決。有一個不錯且免費的工具可以被用來做比較和合并工作,它就是P4Merge(譯注:Perforce圖形化合并工具),我會展示它的安裝過程。
P4Merge可以在所有主流平台上運作,現在開始大膽嘗試吧。對于向你展示的例子,在Mac和Linux系統上,我會使用路徑名,在Windows上,
/usr/local/bin
應該被改為你環境中的可執行路徑。
下載下傳P4Merge:
http://www.perforce.com/perforce/downloads/component.html
首先把你要運作的指令放入外部包裝腳本中,我會使用Mac系統上的路徑來指定該腳本的位置,在其他系統上,它應該被放置在二進制檔案
p4merge
所在的目錄中。建立一個merge包裝腳本,名字叫作
extMerge
,讓它帶參數調用
p4merge
二進制檔案:
$ cat /usr/local/bin/extMerge#!/bin/sh/Applications/p4merge.app/Contents/MacOS/p4merge $*
diff包裝腳本首先确定傳遞過來7個參數,随後把其中2個傳遞給merge包裝腳本,預設情況下, Git 傳遞以下參數給diff:
path old-file old-hex old-mode new-file new-hex new-mode
由于你僅僅需要
old-file
和
new-file
參數,用diff包裝腳本來傳遞它們吧。
$ cat /usr/local/bin/extDiff#!/bin/sh[ $# -eq 7 ] && /usr/local/bin/extMerge "$2" "$5"
确認這兩個腳本是可執行的:
$ sudo chmod +x /usr/local/bin/extMerge
$ sudo chmod +x /usr/local/bin/extDiff
現在來配置使用你自定義的比較和合并工具吧。這需要許多自定義設定:
merge.tool
通知 Git 使用哪個合并工具;
mergetool.*.cmd
規定指令運作的方式;
mergetool.trustExitCode
會通知 Git 程式的退出是否訓示合并操作成功;
diff.external
通知 Git 用什麼指令做比較。是以,你能運作以下4條配置指令:
$ git config --global merge.tool extMerge
$ git config --global mergetool.extMerge.cmd \'extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"'
$ git config --global mergetool.trustExitCode false
$ git config --global diff.external extDiff
或者直接編輯
~/.gitconfig
檔案如下:
[merge]
tool = extMerge[mergetool "extMerge"]
cmd = extMerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
trustExitCode = false[diff]
external = extDiff
設定完畢後,運作diff指令:
$ git diff 32d1776b1^ 32d1776b1
指令行居然沒有發現diff指令的輸出,其實,Git 調用了剛剛設定的P4Merge,它看起來像圖這樣:
當你設法合并兩個分支,結果卻有沖突時,運作
git mergetool
,Git 會調用P4Merge讓你通過圖形界面來解決沖突。
設定包裝腳本的好處是你能簡單地改變diff和merge工具,例如把
extDiff
和
extMerge
改成KDiff3,要做的僅僅是編輯
extMerge
腳本檔案:
$ cat /usr/local/bin/extMerge#!/bin/sh/Applications/kdiff3.app/Contents/MacOS/kdiff3 $*
現在 Git 會使用KDiff3來做比較、合并和解決沖突。
Git預先設定了許多其他的合并和解決沖突的工具,而你不必設定cmd。可以把合并工具設定為:kdiff3、opendiff、tkdiff、meld、xxdiff、emerge、vimdiff、gvimdiff。如果你不想用到KDiff3的所有功能,隻是想用它來合并,那麼kdiff3正符合你的要求,運作:
$ git config --global merge.tool kdiff3
如果運作了以上指令,沒有設定
extMerge
和
extDiff
檔案,Git 會用KDiff3做合并,讓通常内設的比較工具來做比較。
!爆享折扣!
▼▼▼ 原價129, 今日拼團僅需 ¥99! 新人專享首單限時優惠 ¥19.9!!! 但! 僅限前100個名額! ???