星期二, 3月 23, 2010

git diff 自訂 hunk header (function line, function name...)

GNU diff 有一個參數是 -F RE,  --show-function-line=RE 可以在 diff 的時候用來顯示內容屬於哪個區塊,提供除了檔案行數以外的位置辨認。
對於 C,  C++, HTML, java.... 一些常見的語言有內建的辨識語法來抓出 function name,但如果是自訂格式的檔案的話就比需要自己寫,詳情可以參考 man gitattribues,這邊大概紀錄一下作法..

先設定指定的類別用的語法, ~/.gitconfig :
[diff "are"]
    xfuncname = "^#[0-9]+$"
然後在 project 的根目錄或是有放那些檔案的目錄下加一個 .gitattributes (跟 .gitignore 一樣, 有與上層繼承的關係),裡面寫:
*.are diff=are
這樣就可以了, git diff 的一個區段結果會長這樣:

@@ -6,4 +6,4 @@ #103
 3
 4
 5
-6
+7
會找出最近一個符合的字串放在行數後面,這樣如果只看 diff 的話也會比較清楚這個 patch 到底做了什麼。不過要記得,如果 match 到的字串有在 diff 的上下文(context)出現,就不會顯示在 header,所以 header 上的提示不一定是正確的(當然 context number 可以用 -U 設定,不過如果 > 0 就是有可能有這種情況)。

沒有留言: