используйте git's word-diff для латексных файлов - PullRequest
10 голосов
/ 25 сентября 2011

Я хотел бы, чтобы git 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 Ответ

6 голосов
/ 25 сентября 2011

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

external diff died, stopping at foo.tex.

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

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

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

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