git-diff如何生成大块描述?

Rob*_*obM 14 python git diff

(git版本1.6.5.7)

当我运行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 ):
...
Run Code Online (Sandbox Code Playgroud)

请注意,行号后跟TITF: Test Infrastructure Tags Formatclass Tags( object ):.第一个补丁适用于模块范围,描述TITF: Test Infrastructure Tags Format是模块的描述.第二个补丁适用于Tags该类的方法.

  1. git如何生成这些描述?
  2. 如何调整它们以显示修补程序适用的方法名称?

Dat*_*ith 15

Git使用正则表达式为hunk标题找到合适的行.Python是内置的,但您应该能够在〜/ .gitconfig中定义自己的表达式:

[diff "python"]
        xfuncname = "<regex goes here>"
Run Code Online (Sandbox Code Playgroud)

更多关于这里.

编辑:内置的python正则表达式似乎是在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]+"),
         /* -- */
Run Code Online (Sandbox Code Playgroud)

  • GNU diff有类似的`-p` /`--show-c-function`选项,它是git-diff等效/泛化的灵感来源. (2认同)
  • 对于那些想知道"*.py diff = python"是什么的人,我想提一下,这是.gitattributes文件中的一行(如果我没弄错的话). (2认同)