2010-05-06 104 views
12

(GIT版本1.6.5.7)git-diff如何生成大塊描述?

當我運行git diff輸出具有行號後,一個漂亮的範圍暗示我的Python腳本,例如:

diff --git a/file.py b/file.py 
index 024f5bb..c3b5c56 100644 
--- a/file.py 
+++ b/file.py 
@@ -14,6 +14,8 @@ TITF: Test Infrastructure Tags Format 
... 
@@ -1507,13 +1533,16 @@ class Tags(object): 
... 

注意,行號後跟TITF: Test Infrastructure Tags Formatclass Tags(object):。第一個補丁適用於模塊範圍,描述TITF: Test Infrastructure Tags Format是模塊的描述。第二個補丁適用於Tags類的方法。

  1. git如何生成這些描述?
  2. 如何調整它們以顯示修補程序適用的方法名稱?

回答

13

Git使用一個正則表達式來找到適合hunk標題的行。 Python的是內置的,但你應該能夠在你的〜/的.gitconfig來定義自己的表達式:

[diff "python"] 
     xfuncname = "<regex goes here>" 

更多關於此here

編輯:內置的蟒蛇正則表達式似乎userdiff.c(53行)來定義,雖然我的正則表達式福是不夠好,真正理解正是它...

PATTERNS("python", "^[ \t]*((class|def)[ \t].*)$", 
     /* -- */ 
     "[a-zA-Z_][a-zA-Z0-9_]*" 
     "|[-+0-9.e]+[jJlL]?|0[xX]?[0-9a-fA-F]+[lL]?" 
     "|[-+*/<>%&^|=!]=|//=?|<<=?|>>=?|\\*\\*=?" 
     "|[^[:space:]|[\x80-\xff]+"), 
     /* -- */ 
+0

有趣的是,「* .py diff = python」將行爲更改爲我想要的,即使沒有定義自定義[diff「python」],但「* .py + diff」(顯然是我的默認值)的行爲如我的問題所示。 – RobM 2010-05-06 18:03:19

+1

「* .py diff = python」告訴git使用[diff「python」](或預定義的默認值)下定義的選項,「* .py + diff」只是啓用文本diff。該開關通常用於對不總是以二進制檢測的文件禁用差異,例如, 「* .ps -diff」會將PostScript文件視爲二進制文件,因此不會顯示差異。 – DataWraith 2010-05-06 18:12:05

+0

儘管對於二進制文件,可能建議設置「* .ps binary」,它是「-crlf -diff」的別名,即它也禁止文件的LF處理。 – araqnid 2010-05-06 22:53:33