2012-02-13 4 views
2

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

+0

Это действительно должно было быть два отдельных вопроса. –

ответ

1

Поиграйте со стандартным дифф форматированием:

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

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

man diff 

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

Также см

git difftool -y -x "diff -n" 

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

+0

Это в сочетании с http://stackoverflow.com/questions/11331582/how-to-make-git-diff-output-normal-diff-format-non-unified-non-context дает мне то, что я хочу. ура – user1207217

5

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

git config --global core.pager '' 
+0

Приветствия для этого. Я бы повысил, но, похоже, я не могу ... – user1207217

+1

Я думаю, что обычный способ сделать это - установить его в 'cat'. –

+0

Установка на кошку кажется более аккуратной. – user1207217

6

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

Вы можете получить «контекстный дифф» с помощью git diff -c или git diff -C5, например, чтобы получить 5 строк контекста, а не по умолчанию 3.

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

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

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

EDIT:

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

И вот еще одно решение, хотя это немного сложнее. В качестве примера я клонировал git repo для самого 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.)

+0

Я не знаю, какую версию git это уместно, но для «git version 1.7.7.6» git diff -c недействителен, но git diff -Un (n для количества строк контекста) работает. git diff -U0 почти дает мне то, что я хочу, но мне все еще не нравится внешний вид. Это все зависит от предпочтения, в то время как вы предпочитаете контекст diffs, я не так, как это просто проверка здравомыслия, прежде чем совершить для меня вещь. Если мне нужны контекстные различия, я использую meld. Приветствия для подсказки. Опять же, я бы отметил, если это позволит мне. – user1207217

+0

См. Http://stackoverflow.com/questions/11331582/how-to-make-git-diff-output-normal-diff-format-non-unified-non-context - здесь мы можем передать параметр --normal. Приветствия – user1207217

+0

@ user1207217: Я обновил свой ответ (незадолго до того, как я прочитал ссылку в приведенном выше комментарии). –

Смежные вопросы