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 ):
...
注意,行号后面跟着 TITF: 测试基础设施标签格式
和 class Tags( object ):
。第一个补丁适用于模块范围,而描述 TITF: 测试基础设施标签格式
是这个模块的描述。第二个补丁适用于 Tags
类的一个方法。
- git是怎么生成这些描述的?
- 我怎么才能调整它们,让补丁显示适用的方法名称?
2 个回答
1
在Git 2.25版本(2020年第一季度)中,userdiff
功能被更新了,现在它知道"async def
"也是在Python中定义一个“函数”的另一种方式。
你可以查看这个提交记录077a1fd(2019年11月19日),作者是Josh Holland (anowlcalledjosh
)。
(这个更新由Junio C Hamano -- gitster
--合并到提交记录9502b61,日期是2019年12月5日)
userdiff
: 支持Python的异步函数签名:Josh Holland
确认:Johannes SixtPython的
async
函数(用"async def
"而不是"def
"来声明)之前在代码块的头部是看不到的。
这个提交让Git了解了async
函数的语法,并为Python的userdiff
正则表达式添加了测试。
16
Git使用正则表达式来找到合适的行作为变更块的标题。Python自带了这个功能,但你也可以在你的~/.gitconfig文件中定义自己的表达式:
[diff "python"]
xfuncname = "<regex goes here>"
想了解更多内容,可以点击这里。
补充说明:内置的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]+"),
/* -- */