使用meld作為git的輔助工具


原文鏈接: https://lrita.github.io/2017/05/14/use-meld-as-git-tool/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

 

為什么使用meld

當同一個文件被多人編輯時,經常會出現沖突的問題,因此就需要解決沖突。

但是git內置的diff、merge工具比較孱弱,經常會發生一些問題,例如

刪除的代碼被人合並時又加了回來

刪除的代碼被人合並時又加了回來,我想這種場景使用git的團隊都遇見過。如果出現這種問題時, 解決沖突的人又是一個粗心的家伙,同時代碼有沒編譯出錯,則很難再發現產生了這個異常。只有 當bug再次出現時,才會發現“這個bug我明明修復了,怎么代碼又回滾了?”。

下面詳細說明一下這個問題出現的原因。

當git上原始代碼為:

conflict begin
Hello world!!!
Here is a misuse code. 
conflict end

當用戶A、B同時下載該代碼同時開發時。

用戶A發現了一個bug,將bug移除,提交代碼,代碼變更為:

conflict begin
Hello world!!!
conflict end

同時用戶B添加了一個新的功能,代碼變更為:

conflict begin
Hello world!!!
Here is a misuse code. 
Here is a new feature.
conflict end

然后B提交代碼時會產生一個沖突,需要解決,則git默認的merge工具則顯示沖突代碼為:

conflict begin
Hello world!!!
<<<<<<< HEAD
Here is a misuse code.
Here is a new feature.
=======
>>>>>>> e84872b222b7a9d8a3e8745ea3c9a3e85237503c
conflict end

然而用戶B可能對git的merge顯示並不熟悉、或者B是一個粗心的人。此時用戶B看到<<<<<<<=======之間是自己本地提交的新功能代碼,則B將merge合並提示信息刪除后,代碼變為:

conflict begin
Hello world!!!
Here is a misuse code.
Here is a new feature.
conflict end

然后B將代碼提交,此時可見,被刪除的bug代碼又回來了,如果此時沒有人專門review代碼, 大家並沒有感覺到上面不對,只有在再次出現bug時才會發現該問題。

三路合並工具

最容易避免以上問題出現的方式就是采用三路合並工具。場景的三路合並工具有kdiff3meldBeyond Compare等。在此推薦meld,該工具具有良好的跨平台能力,無論你使用 Window x/Linux/Mac OS都可以很容易的一鍵安裝該軟件,同時免費使用,而且啟動速度 快於Beyond Compare等等收費軟件。

mac 安裝 meld

執行以下命令一鍵安裝

brew install caskroom/cask/meld

git 配置

修改本地的~/.gitconfig配置文件,加入以下幾行配置

[merge]
        tool = meld
	conflictstyle = diff3
[mergetool "meld"]
        cmd = meld $LOCAL $BASE $REMOTE --output=$MERGED --auto-merge

當用戶運行git pull或者git pull --rebase產生沖突時,執行git mergetool就會彈出meld 的三路合並界面: meld-3-way-merge

可見界面一共分為3欄,左邊一欄為你本地當前文件內容,右面一欄為遠端服務器上當前文件內容。 中一欄為本地當前文件原始內容。可見中間一欄meld已經幫你自動合並了,檢查無誤就可以直接保存 退出了。然后meld幫你自動保存了一份git原始沖突文件xxx.orig,檢查無誤可以刪除此文件。

注:當不同行沖突時,meld會幫你自動合並,當同一行沖突時,meld會以git 沖突文件的格式顯示在 中間欄,此時你比較判斷<<<<<<< HEAD/=========/>>>>>>>>3行直接的差異手動合並即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM