2010-11-10 47 views
17

我經常使用gnu-utils補丁和diff。使用Git,我經常這樣做:是否有知道縮進的diff工具(補丁)?

git diff 

往往是簡單的變化產生大的補丁,因爲這改變了,例如,添加的if/else循環,這裏的一切都向右縮進唯一的。

查看這樣的修補程序可能很麻煩,因爲只有逐行手動比較才能指示在縮進代碼內是否有任何實質性更改。我們可能只會談論幾行代碼,或者關於幾十個(或更多)的嵌套代碼。 (我知道:這樣一個假設的大函數可以更好地分成更小的函數,但那不在重點之內)。

當代碼塊中的唯一更改是縮進並讓開發人員知道的時候,GNU diff/patch無法知道嗎?

是否有任何其他差異工具這樣操作?

編輯:好,有--ignore-space-change但當時我們是在一個要麼/或情況:要麼我們有一個人更可讀的補丁或者我們有一個完整的補丁,機器會知道如何閱讀。我們難道不能在兩全其美的情況下使用更加精細的diff工具嗎?它可以讓人們看到他們的空間變化,同時允許機器完全應用補丁?

回答

17

使用GNU diff,您可以通過-b--ignore-space-change忽略修補程序中空白量的變化。

如果您使用emacs併發送了補丁,您還可以使用M-x diff-ignore-whitespace-hunk來重新格式化該補丁以忽略特定塊中的空白區域。或者diff-refine-hunk突出顯示角色層次上的變化,這往往會指出變化的「肉」。

至於應用補丁,您可以使用帶有GNU補丁的-l--ignore-whitespace來忽略標籤和空格的變化。請注意Python代碼:-)

+2

+1瞭解更多git diff -b> my.patch也可以工作,但這很有用,但輸出如果我們能夠得到問題雙方的最佳結果,例如有一個帶有3種類型的線的補丁文件(相應地着色):沒有改變的線條,已經改變的線條( - 或+)以及僅僅縮進的線條......機器都會知道如何應用該補丁,並且人類會更好地理解它。 – augustin 2010-11-10 11:55:20

2

我不知道git diff。但是不同的工具不僅能夠理解縮進,而且實際上您的目標語言中的任何佈局更改都是我們的Smart Differencer

此工具以與編譯器相同的方式解析代碼的前後版本,並比較得到的語法樹,因此它不受空白變化(除了諸如Python縮進之類的語義上重要的空白之外)的任何種類的,插入或刪除的註釋,甚至在常量上改變基數。

結果是通過語言結構(表達式,語句,聲明,塊,方法等)的程序員編輯操作(「移動,插入,刪除,複製,重命名」)而不是「插入行「或」刪除行「。

2

對於什麼是價值,使用Git difftool與像meldxxdiff工具使得差異更具有可讀性。

0

我嘗試不會像其他一些更改一樣提交文件範圍內的縮進更改。我在之前或之後的單獨提交中提交縮進更改,並提交「僅更改縮進」消息。「,以便清楚說明,以便不需要進行手動差異檢查,以查看是否有其他內容發生了變化。