Использовать git word-diff для латексных файлов

Я хотел бы иметь git diff выводит меня регулярные diff для всех файлов, кроме *.tex. Для файлов *.tex я хотел бы видеть вывод git diff --word-diff.

Я играл с .gitattributes и .gitconfig, но самым дальним я получил, чтобы получить частичный дисплей для одного .tex файла, после чего произошел сбой.

Можно ли получить это поведение?

Мой .gitattributes:

*.tex diff=latex

.gitconfig:

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

и word-diff.sh:

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

Ответ 1

Можете ли вы опубликовать (или ссылку) полный пример? Я настроил именно то, что вы описали, и кажется, что он работает нормально. То есть, вывод diff выделяет слова, а не строки, и все изменения, которые я внес, были включены (то есть, это не дошло до того или нет). Единственная аномалия заключалась в том, что diff всегда выходил с:

external diff died, stopping at foo.tex.

Это происходит из-за того, что git diff, когда выполняется так, как вы его используете, ведет себя как автономный инструмент diff: он выходит с ненулевым кодом выхода, если файлы отличаются. Git не ожидает такого поведения; он предполагает, что ваша пользовательская команда будет всегда успешно выполняться, а коды выхода с ошибкой указывают на фактическую проблему.

Git уже знает, что файлы имеют разницу и не требует, чтобы внешняя команда выполняла это определение. Внешняя команда является строго инструментом форматирования.

Если вы изменяете свой diff-words.sh script для успешного выхода, все должно получиться лучше:

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