2010-07-29 42 views
5

diff通常產生相當無知的輸出。這是一個很好的例子。如果我們開始與此:GNU diff的替代品?

class World 
    def hello 
    puts "Hello, world" 
    end 
    def goodbye 
    puts "Goodbye, world" 
    end 
end 

掛斷第二個方法,改變第一:

class World 
    def hello 
    puts "Hello, #{self}" 
    end 
end 

diff -u將是一團糟 - 這表明兩種方法已被合併:

class World 
    def hello 
- puts "Hello, world" 
- end 
- def goodbye 
- puts "Goodbye, world" 
+ puts "Hello, #{self}" 
    end 
end 

而不是更合理:

class World 
    def hello 
- puts "Hello, world" 
+ puts "Hello, #{self}" 
    end 
- def goodbye 
- puts "Goodbye, world" 
- end 
end 

這只是一個玩具的例子,所以diff的輸出仍然是可以理解的 - 在實踐中它通常會變得更糟。

diff有沒有其他選擇,可能會有點更聰明?

+1

您是否只想使用CLI,或者將圖形應用程序(如KDIFF)爲您工作? – 2010-07-29 04:58:16

+0

是的,我正要說。 Kompare實際上是最好的差異之一,國際海事組織。如果不解析輸出,基於GUI的差異比CLI差異更容易使用。 – Gilead 2010-07-29 05:07:42

+1

我不希望更好地顯示糟糕的差異,我想要好的差異。 [這看起來可能是相關的](http://alfedenzo.livejournal.com/170301.html)。 – taw 2010-07-29 05:19:13

回答

1

你可能會考慮我們的SD Smart Differencer。它提供了基於代碼結構而不是「行差異」的差異,因此它專注於語言元素(表達式,語句,塊,方法)和編輯操作(刪除,插入,複製,替換,重命名)。

它是語言特定的;它必須是使用語言結構作爲指導。它使用明確的語言定義。我無法完全知道你使用的是什麼語言(Python?)。有許多語言的智能差異工具,包括C,C++,C#,Java,Python,Fortran,COBOL,...

+1

這個例子在Ruby中。智能差分器看起來像它只有Windows版本,而不會因爲我想大多數語言支持(和他們說的C預處理器什麼意味着它甚至不會能夠diff的最C),閉源(非常糟糕的主意開發工具),以及我甚至不確定試用版下載是否可用。也許其他人會覺得它有用。 – taw 2010-07-31 05:13:05

+0

你想要什麼語言?是的,由於任意放置預處理器指令和宏調用,C代碼存在限制;這些使得很難在任意C代碼中識別代碼結構。目前它並不適用於Ruby;我們已經玩過Ruby語言定義,但尚未準備好。是的,它是封閉的源代碼;歡迎您撰寫開源版本。你沒有在你的問題中說明任何這些限制。有各種語言的評估版本,包括Java,C#和C++。您可能需要在網站上提問 – 2010-07-31 05:55:32

1

我正在研究一種差異算法,它完全符合你的要求,但是我的算法對diff過程的來源數量沒有限制。目前它處於測試階段,並且仍在測試中,直到完成此測試,內聯視圖才起作用。請檢查並告知我是否以及如何打破差異報告,以便我可以提供適當的更正。

網站:http://prettydiff.com/GitHub

2

rfcdiff(草案比較工具)報告此:

enter image description here

該工具使用GNU diff和wdiff。