Заставить git gui разбивать длинные строки в diff? - PullRequest
0 голосов
/ 27 февраля 2019

Возможно сделать git-emit diff с длинными строками для использования в git gui?

Для использования в командной строке можно просто изменить настройку core.pager, но это не таквлияет git gui.

Несмотря на то, что я нашел работающее решение и разместил этот вопрос в стиле вопросов и ответов, я надеюсь на решения, которые устранят любой из следующих недостатков:

(a) Фильтрприменяется также и вне git gui, где это может быть ненужным.

(b) Инструмент fold не делает отступ обернутых строк, что снижает читаемость.Я думаю о чем-то вроде Emacs 'adaptive-wrap-mode.

1 Ответ

0 голосов
/ 27 февраля 2019

Этого можно добиться, используя функцию «textconv», используя инструмент fold в качестве фильтра.

Его необходимо настроить в два этапа.

Определить драйвер

Это можно сделать для репозитория, запустив

git config diff.DRIVER.textconv 'fold -s'

или отредактировав .git/config, чтобы он содержал

[diff "DRIVER"]
    textconv = fold -s

или глобально

git config --global diff.DRIVER.textconv 'fold -s'

При необходимости инструмент fold можно заменить более интеллектуальными фильтрами с учетом языка.Опция -s делает сгиб в пробельных символах.

В Windows утилита сгиба может использовать окончания строки DOS, которые могут конфликтовать с вашими настройками для хранилища, что приводит к ложным ^M символам в разнице.,Это можно исправить, используя вместо этого

sh -c 'fold "$0" | dos2unix'

Оболочка sh требуется, поскольку протокол textconv ожидает, что указанная команда примет одно имя файла в качестве аргумента, и выдаст свой вывод на STDOUT.

Настройка .gitattributes

Настройка файла .gitattributes, содержащего

PATTERN diff=DRIVER

Здесь DRIVER - произвольное имя драйвера и PATTERN - шаблон подстановки, соответствующийфайлы, к которым он должен применяться, например, * для «всех файлов» или *.EXT для файлов с расширением .EXT.

Пример

Например, для запуска файлов * .tex через фильтр "fold" с помощью "dos2unix":

=== .gitattributes ===
*.tex diff=tex

=== .git/config ===
[diff "tex"]
    textconv = sh -c 'fold "$0" | dos2unix'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...