Различия в стиле CVS в git - PullRequest
       17

Различия в стиле CVS в git

2 голосов
/ 13 февраля 2012

Есть ли способ сделать формат вывода git diffs похожим на diff в стиле cvs? Я считаю, что git diffs менее читабельны. Кроме того, git diff, появляющиеся в more, раздражают - как я могу отключить это?

Ответы [ 3 ]

6 голосов
/ 14 февраля 2012

git diff использует «универсальный» формат, diff -u, по умолчанию. cvs diff использует более старый стандартный формат diff (удаленные строки, отмеченные <, добавленные строки, отмеченные >, без контекста вокруг каждого различия).

Вы можете получить "diff diff контекста", используя git diff -c или git diff -C5, например, чтобы получить 5 строк контекста, а не по умолчанию 3.

diff --normal (по крайней мере, если вы используете diffutils GNU) создаст diff в старом стиле, но git diff, похоже, не распознает опцию --normal.

Лично я нахожу контекстные различия гораздо более читаемыми, чем различия в старом стиле, поэтому я никогда не обнаруживал необходимости использовать различия в старом стиле с git diff. Попробуйте git diff -c (вместе с предложением haggai_e отключить пейджер).

Если вам действительно нужны различия в старом стиле (<, >, без контекста), возможно, есть способ сделать это.

РЕДАКТИРОВАТЬ:

Если git diff не делает то, что вы хотите, вы можете извлечь копии ревизий файла и использовать любой понравившийся вам инструмент сравнения. Мой собственный инструмент get-versions может извлекать несколько версий файла из git (или из RCS или CVS).

А вот еще одно решение, хотя оно немного сложнее. В качестве примера я клонировал репозиторий git для git. Если я хочу сравнить две последовательные версии файла README верхнего уровня, я могу сделать это:

$ diff --normal <(git show 779d7e93773a0dcf918dc77023511fdc68161bd8:README) \
                <(git show 71ce415dc088f19a0b8d6c8567dfdd6d851842b2:README)
24,26c24,25
< compatible with the GPLv2).
< It was originally written by Linus Torvalds with help of a group of
< hackers around the net. It is currently maintained by Junio C Hamano.
---
> compatible with the GPLv2). It was originally written by Linus
> Torvalds with help of a group of hackers around the net.
$ 

Было бы достаточно легко обернуть это в небольшой скрипт.

Обратите внимание, что путь к файлу, следующий за : (README в приведенном выше примере), относится к корню хранилища, а не к текущему каталогу. Вы можете поставить перед именем ./, чтобы сделать его относительно текущего каталога. (Последний может не работать с некоторыми более старыми версиями git.)

5 голосов
/ 13 февраля 2012

Вы можете отключить пейджер, установив core.pager в пустую строку:

git config --global core.pager ''
1 голос
/ 15 января 2013

Попробуйте поиграть со стандартным форматированием различий:

git difftool -y -x "diff --unchanged-group-format='' --old-line-format='< %L' --new-line-format='> %L'"

Это дает CVS-подобные переводы новой и старой строк без контекста, но она не вставляет дополнения между группами разных строк. Не совсем уверен, как достичь остального, учитывая, что я не знаю, в какой степени вы хотели бы, чтобы CVS-подобное форматирование.

man diff

Для получения дополнительной информации

Также см.

git difftool -y -x "diff -n"

Но я сомневаюсь, что это делает то, что вы хотите. Если это работает для вас, чтобы заставить его работать каждый раз с помощью git diff, см. Конфигурирование инструмента сравнения с .gitconfig? , который ссылается на http://jeetworks.com/node/90 в принятом ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...