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

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

Решение

Можете ли вы опубликовать (или ссылку на) полный пример? Я настроил именно то, что вы описали, и, кажется, работает нормально. Это 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
Другие вопросы по тегам