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

时间:2010-05-06 17:24:51

标签: 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 ):
...

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

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

2 个答案:

答案 0 :(得分:15)

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

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

有关此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]+"),
         /* -- */

答案 1 :(得分:1)

在Git 2.25(2020年第一季度)中,userdiff机制被告知“ async def”是在Python中开始“函数”的另一种方式。

请参见commit 077a1fdJosh Holland (anowlcalledjosh)(2019年11月19日)。
(由Junio C Hamano -- gitster --commit 9502b61中合并,2019年12月5日)

  

userdiff:支持Python异步功能

     

签名人:Josh Holland
   Acked-by:约翰内斯·瑟维特(Johannes Sixt)

     

Python的async函数(用“ async def”而不是“ def”声明)未显示在大块标题中。
  该提交向Git教授了async函数语法,并为Python userdiff正则表达式添加了测试。