2011-09-24 19 views
10

Chciałbym, aby git diff wyprowadzał mi regularne różnice dla wszystkich plików, z wyjątkiem * .tex. Dla plików * .tex, chciałbym zobaczyć wyjście git diff --word-diff.użyj dyferencjału git dla plików latexowych

Grałem z .gitattributes i .gitconfig, ale najdalej było dostać częściowy wyświetlacz dla jednego pliku .tex, po którym nastąpiła awaria.

Czy to możliwe, aby uzyskać to zachowanie?

My .gitattributes:

*.tex diff=latex 

.gitconfig:

[diff "latex"] 
    wordRegex = "\\\\[a-zA-Z]+|[{}]|\\\\.|[^\\{}[:space:]]+" 
    command = ~/bin/word-diff.sh 

i word-diff.sh:

#!/bin/sh 
git --no-pager diff --color-words "$2" "$5" 
+0

Jak wpadłeś z „$ 2” i „$ 5”? Nie mogę znaleźć informacji o tym w dowolnym miejscu. – silvenon

+0

Znaleziono, przepraszam. Dla innych, którzy się zastanawiali, wyszukaj GIT_EXTERNAL_DIFF na stronie [git man page] (http://git-scm.com/docs/git). – silvenon

+0

Jako uwaga dodatkowa, istnieje [ma być] (http://git-scm.com/docs/gitattributes/1.9.0#_defining_a_custom_hunk_header) wbudowany wzór "tex" dostępny, który powinien dać ci rozsądny przystojniak główki. Ale to nie działa dla mnie. –

Odpowiedz

6

można dodawać (lub link) kompletnego przykład? Ustawiłem dokładnie to, co opisałeś i wygląda na to, że działa dobrze. Oznacza to, że wyjście diff podświetla słowa, a nie linie, a wszystkie wprowadzone przeze mnie zmiany zostały uwzględnione (to znaczy, że nie uległy wcześnie ani nic). Jedyną anomalią, że diff zawsze wyjście z:

external diff died, stopping at foo.tex. 

Dzieje się tak dlatego git diff, kiedy prowadzony w sposób, w jaki używasz go, zachowuje się jak samodzielny diff narzędzia: to kończy pracę z niezerowym kodem wyjścia jeśli pliki się różnią. Git nie spodziewa się takiego zachowania; zakłada, że ​​twoje polecenie niestandardowe zawsze będzie działało pomyślnie, a kody błędów błędu wskazują na faktyczny problem.

Git już wie, że pliki są różnicą i nie wymaga zewnętrznego polecenia, aby to ustalić. Polecenie zewnętrzne jest ściśle narzędziem formatującym.

Jeśli zmodyfikować skrypt diff-words.sh zawsze zakończyć sukcesem, rzeczy, które należy wypracować lepsze:

#!/bin/sh 
git --no-pager diff --color-words "$2" "$5" 
exit 0 
+0

To był dokładny komunikat o błędzie, który dostałem. Dodanie 'exit 0' wykonało lewę, dzięki! –

Powiązane problemy