2010-05-06 8 views
12

(git wersja 1.6.5.7)W jaki sposób git-diff generuje opisy hunk?

Kiedy biegnę git diff wyjście ma ładny zakres podpowiedź po numerach linii dla moich skryptów Python, np:

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

pamiętać, że numery linii są następnie TITF: Test Infrastructure Tags Format i class Tags(object):. Pierwsza poprawka dotyczy zakresu modułu, a opis modułu to opis. Druga łata dotyczy metody z klasy Tags.

  1. W jaki sposób git generuje te opisy?
  2. W jaki sposób mogę je poprawić, aby pokazać nazwę metody, do której odnosi się poprawka?

Odpowiedz

13

Git używa wyrażenia regularnego, aby znaleźć odpowiednią linię dla nagłówków przystojniaków. Python jest wbudowany, ale powinieneś być w stanie określić swój własny wyraz w katalogu ~/.gitconfig:

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

Więcej o tej here.

Edit: Wbudowany python regex wydaje się być zdefiniowane w userdiff.c (linia 53), chociaż mój regex-fu nie jest wystarczająco dobry, aby właściwie zrozumieć dokładnie to, co robi ...

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

Co ciekawe "* .py diff = python" zmienia zachowanie tak, jak chciałbym, nawet bez definiowania niestandardowego [pytka "diff"], ale "* .py + diff" (podobno moje domyślne) zachowuje się tak, jak pokazano w moim pytaniu . – RobM

+1

"* .py diff = python" mówi gitowi, aby używał opcji zdefiniowanych w [diff "python"] (lub predefiniowanym domyślnym), "* .py + diff" po prostu włącza różnicę tekstową. Ten przełącznik jest zwykle używany do wyłączania różnic dla plików, które nie zawsze są wykrywane jako pliki binarne, np. "* .ps -diff" traktuje pliki PostScript jako pliki binarne, a więc nie wyświetla różnic. – DataWraith

+0

, chociaż dla plików binarnych może być wskazane ustawienie "* .ps binary", który jest aliasem dla "-crlf -diff", tzn. Wyłącza również dla tego pliku CRLF <-> przetwarzanie LF. – araqnid

Powiązane problemy