2010-05-06 101 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