2010-05-06 7 views
12

(versión 1.6.5.7 GIT)¿Cómo genera git-diff las descripciones de trozos?

Cuando corro git diff la salida tiene un bonito toque alcance después de que los números de línea para mis scripts de Python, por ejemplo:

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

Note que los números de línea son seguidos por TITF: Test Infrastructure Tags Format y class Tags(object):. El primer parche se aplica al alcance del módulo y la descripción TITF: Test Infrastructure Tags Format es la descripción del módulo. El segundo parche se aplica a un método de la clase Tags.

  1. ¿Cómo genera git estas descripciones?
  2. ¿Cómo puedo modificarlos para mostrar el nombre del método al que se aplica el parche?

Respuesta

13

Git usa una expresión regular para encontrar una línea adecuada para los encabezados de trozos. Python es incorporado, pero debe ser capaz de definir su propia expresión en su ~/.gitconfig:

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

Más información este here.

Editar: La expresión regular pitón incorporado parece estar definido en userdiff.c (línea 53), aunque mi expresión regular-fu no es lo suficientemente bueno para entender en realidad exactamente lo que hace ...

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

Curiosamente "* .py diff = python" cambia el comportamiento para que sea como yo quisiera incluso sin definir un [diff "python] personalizado, pero" * .py + diff "(aparentemente mi predeterminado) se comporta como se muestra en mi pregunta . – RobM

+1

"* .py diff = python" le dice a git que use las opciones definidas bajo [diff "python"] (o el predeterminado predefinido), "* .py + diff" solo habilita una diferencia textual. Este modificador generalmente se utiliza para deshabilitar diffs para archivos que no siempre se detectan como binarios, p. "* .ps -diff" tratará los archivos PostScript como binarios y, por lo tanto, no muestra una diferencia. – DataWraith

+0

, aunque para archivos binarios, puede ser recomendable establecer "* .ps binary", que es un alias para "-crlf -diff", es decir, deshabilita el procesamiento CRLF <-> LF para el archivo también. – araqnid

Cuestiones relacionadas