2012-06-20 38 views
5

我想使用meld來查看修訂之間的差異。我安裝MELD然後在項目目錄執行:無法使用meld來比較差異

svn diff -r 2165:2182 --diff-cmd meld 

但thows了以下錯誤:

Index: app/models/college_friends_count.rb 
=================================================================== 
svn: E200012: Process 'meld' failed (exitwhy 2) 

誰能告訴我是怎麼回事錯在這裏?

+0

嘗試在兩個任意文件運行MELD。它工作嗎? –

+1

是啊......它正在工作......如果我在沒有提交的情況下更改某些文件中的內容,則meld會通過執行「合併」來顯示差異。但比較不同的修訂版本不起作用 –

+0

SVN傳遞到diff工具不僅有2個路徑可以進行比較,而且還有其他選項(如標籤)(您可以通過傳遞給--cmd腳本來顯示其命令行來查看所有選項)。也許融合不接受那些額外的選擇。我對融合知之甚少,只是一個想法。 –

回答

5

我相信E200012意味着用非零退出代碼退出的底層進程(meld)。很多差異工具都是用來表示差異操作的結果(0 =沒有差異1 =差異等)。

雖然我的meld版本似乎不使用非零退出代碼,但我知道colordiff會在目錄爬行「svn diff」期間暫停SVN,就像上面的示例中那樣。在沒有任何測試更改的文件上試試。

一個很好的解決方法是讓自己的diff命令,讓我們說你怎麼稱呼它meld_svn:

#!/bin/bash 
meld "$6" "$7" 
exit 0 

所以我們正在做的是忽視MELD的退出代碼,並與我們自己退出(其中獲不停止SVN)。參數周圍的引號意味着它們中包含空格的文件名不會破壞您的腳本。

使其可執行,然後編輯〜/ .subversion/config並將diff-cmd設置爲「meld_svn」。這對colordiff很有用,如果融合確實以非零退出代碼退出,應該用融合解決你的問題。

我希望有幫助。

4

對我來說,問題在於,默認情況下,svn將-u作爲外部diff命令的選項進行傳遞,並且meld不指望或標記。

-x標誌svn-diff允許你來覆蓋默認的標誌:上融合了命令行

svn diff -x \"\" --diff-cmd meld 

這將替換-u""的轉義必需的,這樣你的shell不解析 - 經濟通標誌着第一輪,並將它們傳遞給SVN,SVN將它傳遞給meld命令行。

(順便說一句,使用echo作爲DIFF-CMD可以讓你輕鬆檢查什麼SVN會發送到MELD)

+0

請參閱[本答案](http:// stackoverflow。com/a/7418087/420867)爲另一種方法,也允許融合進行合併。 – drevicko