Когда я набираю «git diff», я хотел бы видеть параллельный diff, например «diff -y», или отображать diff в интерактивном инструменте diff, например «kdiff3». Как это может быть сделано?
163
Когда я набираю «git diff», я хотел бы видеть параллельный diff, например «diff -y», или отображать diff в интерактивном инструменте diff, например «kdiff3». Как это может быть сделано?
Ответы:
Хотя Git имеет внутреннюю реализацию diff, вы можете вместо этого настроить внешний инструмент.
Есть два разных способа указать внешний инструмент сравнения:
GIT_EXTERNAL_DIFF
иGIT_DIFF_OPTS
окружения.git config
Смотрите также:
git diff --help
При выполнении
git diff
Git проверяет как настройки вышеупомянутых переменных окружения, так и его.gitconfig
файл.По умолчанию Git передает следующие семь аргументов программе diff:
Обычно вам нужны только параметры old-file и new-file. Конечно, большинство инструментов сравнения принимают в качестве аргумента только два имени файла. Это означает, что вам нужно написать небольшой скрипт-обертку, который принимает аргументы, которые Git предоставляет скрипту, и передает их внешней программе git по вашему выбору.
Допустим, вы поместили свой скрипт-обертку в
~/scripts/my_diff.sh
:Затем вам нужно сделать этот скрипт исполняемым:
Затем вам нужно сообщить Git, как и где найти ваш собственный скрипт для оболочки diff. У вас есть три варианта, как это сделать: (Я предпочитаю редактировать файл .gitconfig)
Используя
GIT_EXTERNAL_DIFF
,GIT_DIFF_OPTS
например, в вашем файле .bashrc или .bash_profile вы можете установить:
С помощью
git config
используйте "git config", чтобы определить, где находится ваш скрипт-обертка:
Редактирование вашего
~/.gitconfig
файлаВы можете отредактировать свой
~/.gitconfig
файл, чтобы добавить эти строки:Примечание:
Аналогично установке вашего специального инструмента сравнения, вы также можете установить собственный инструмент слияния, который может быть визуальным инструментом слияния, чтобы лучше помочь визуализировать слияние. (см. страницу progit.org)
Смотрите: http://fredpalma.com/518/visual-diff-and-merge-tool/ и https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
источник
meld
?meld
ли настроить версию для создания каталога diff, где я могу выбрать, для каких файлов я хочу просмотреть diff? В настоящее время он запускает отдельнуюmeld
команду для каждого файла, и мне нужно выйтиmeld
, чтобы увидеть следующий файл. Я бы предпочелmeld
показать мне список каталогов измененных файлов, как он ведет себя приmeld
использовании из Mercurial.Попробуй git difftool
Используйте
git difftool
вместоgit diff
. Ты никогда не вернешься.ОБНОВЛЕНИЕ, чтобы добавить пример использования:
Вот ссылка на другой стековый поток, в котором говорится
git difftool
: Как просмотреть вывод «git diff» с помощью моего предпочтительного инструмента сравнения / средства просмотра?Для более новых версий
git
, тоdifftool
команда поддерживает множество инструментов внешней Diff вне из коробки. Например,vimdiff
поддерживается автоматически и может быть открыт из командной строки:Другие поддерживаемые внешние инструменты сравнения перечислены
git difftool --tool-help
в следующем примере:источник
This message is displayed because 'diff.tool' is not configured.
. Возможно, обновите ответ с минимальной настройкой этой вещи, чтобы она отображала в терминале параллельные различия, о чем просил OP? Инструменты с графическим интерфейсом совершенно бесполезны на удаленном сервере, где вы подключаетесь с помощью ssh.git difftool
сvimdiff
не всегда правильно выстроить два файла / буфера.git difftool -y
чтобы предотвратить приглашениеgit difftool
в Windows & Linux: stackoverflow.com/a/48979939/4561887Вы также можете попробовать
git diff --word-diff
. Это не совсем бок о бок, но как-то лучше, так что вы можете предпочесть это вашим реальным потребностям.источник
git diff --word-diff=color
--word-diff=color
выдает мне неверную опцию ошибки. В какой версии он был представлен?git diff --color-words
работает.git diff --color-words
это путь на современных версиях git.ydiff
Ранее назывался
cdiff
, этот инструмент может отображать бок о бок , инкрементные и красочные различия.Вместо этого
git diff
сделайте:Это запустит
ydiff
режим параллельного отображения для каждого файла с различиями.Установить с помощью:
-или-
Для
git log
вы можете использовать:-w0
автоматически определяет ширину вашего терминала. Смотритеydiff
страницу репозитория GitHub для деталей и демонстрации.Протестировано в Git 2.18.0, ydiff 1.1.
источник
git diff | cdiff -s
с icdiff?ydiff -s
из рабочего пространства git / svn / hg, вам не нужноcd <git repo>
а затем запуститьydiff -ls <path/to/file>
Вы можете сделать бок о бок,
diff
используяsdiff
следующее:где
HEAD^
пример, который вы должны заменить тем, с чем хотите разобраться.Я нашел это решение здесь, где есть несколько других предложений. Тем не менее, этот единственный ответ - вопрос ОП кратко и ясно.
Смотрите man git-difftool для объяснения аргументов.
Принимая комментарии на доске, вы можете создать удобную
git sdiff
команду, написав следующий исполняемый скрипт:Сохраните это как
/usr/bin/git-sdiff
иchmod -x
это. Тогда вы сможете сделать это:источник
tput cols
вместо этого, например:git difftool -x "sdiff -s -w $(tput cols)"
.тогда просто:
источник
Если вы хотите видеть в браузере параллельные различия без использования GitHub, вам может понравиться git webdiff , заменяющий
git diff
:Это дает ряд преимуществ по сравнению с традиционными инструментами для изменения графического интерфейса, такими как
tkdiff
то, что он может дать вам подсветку синтаксиса и показать различия в изображениях.Подробнее об этом читайте здесь .
источник
Я использую Colordiff .
В Mac OS X установите его с
На Linux это возможно
apt get install colordiff
или что-то подобное, в зависимости от вашего дистрибутива.Затем:
Или создайте псевдоним
Тогда вы можете использовать его
Я назвал это "diffy", потому что
diff -y
это параллельный diff в unix. Colordiff также добавляет цвета, которые приятнее. В этом параметре-ydw
,y
это для бок о бок,w
игнорировать пробелы иd
производить минимальный diff (обычно вы получите лучший результат как diff)источник
-y
чтобы пропуститьLaunch 'colordiff' [Y/n]:
приглашение.git alias diffy "difftool --extcmd=\"colordiff -ydw\""
? Не должно ли это бытьgit config --global alias.diffy "difftool --extcmd=\"colordiff -ydw\""
?Для Unix, совмещая как раз
git
и встроенныйdiff
:Конечно, вы можете заменить HEAD любой другой ссылкой на git и, возможно, захотите добавить что-то вроде
-W 170
команды diff.Это предполагает, что вы просто сравниваете содержимое своего каталога с прошлым коммитом. Сравнение двух коммитов более сложное. Если ваша оболочка есть,
bash
вы можете использовать «процесс подстановки»:где
REF1
иREF2
git ссылки - теги, ветки или хеши.источник
Мне лично очень нравится icdiff !
Если вы на
Mac OS X
сHomeBrew
, просто сделатьbrew install icdiff
.Чтобы правильно получить метки файлов, а также другие интересные функции, я имею в своем
~/.gitconfig
:И я использую это как:
git difftool
источник
Этот вопрос появился, когда я искал быстрый способ использовать встроенный способ git для определения различий. Мои критерии решения:
Я нашел этот ответ, чтобы получить цвет в мерзавце.
Чтобы получить параллельный diff вместо строки diff, я настроил отличный ответ mb14 на этот вопрос со следующими параметрами:
Если вам не нравится дополнительная [- или {+, опция
--word-diff=color
может быть использована.Это помогло получить правильное сравнение как с json, так и с xml текстом и java кодом.
Таким образом,
--word-diff-regex
параметры имеют полезную видимость вместе с настройками цвета, чтобы получить возможность раскрашивать исходный код рядом друг с другом по сравнению со стандартной разницей строк при просмотре больших файлов с небольшими изменениями строк.источник
Несколько других уже упоминали cdiff для git- сравнения, но никто не дал полной реализации этого.
Настройте cdiff:
Отредактируйте ~ / .gitconfig, вставив эти строки:
Выключение пейджера необходимо для работы cdiff с Diff, в любом случае это пейджер, так что это нормально. Difftool будет работать независимо от этих настроек.
Псевдоним show необходим, потому что git show поддерживает только внешние инструменты сравнения через аргумент.
Знак «#» в конце внешней команды diff важен. Команда diff в Git добавляет $ @ (все доступные переменные diff) к команде diff, но нам нужны только два имени файла. Таким образом, мы вызываем эти два явно с $ 2 и $ 5, а затем скрываем $ @ за комментарием, который иначе запутал бы sdiff. В результате возникает ошибка, которая выглядит следующим образом:
Команды Git, которые теперь производят параллельное сравнение:
Использование CDIF:
Теперь у вас есть параллельный diff через git diff и difftool. И у вас есть исходный код Python для настройки опытных пользователей, если вам это нужно.
источник
Вот подход. Если вы пропустили меньше, ширина xterm будет равна 80, что не так уж и жарко. Но если вы продолжите команду, например, с COLS = 210, вы можете использовать ваш расширенный xterm.
источник
Откройте Intellij IDEA , выберите одну или несколько фиксаций в окне инструмента «Контроль версий», просмотрите измененные файлы и дважды щелкните их, чтобы просмотреть изменения рядом для каждого файла.
С помощью встроенного средства запуска командной строки вы можете вывести IDEA куда угодно с помощью простого
idea some/path
источник
Есть много хороших ответов на эту тему. Моим решением этой проблемы было написать сценарий.
Назовите это 'git-scriptname' (и сделайте его исполняемым и поместите его в свой PATH, как любой скрипт), и вы можете вызвать его как обычную команду git, выполнив
Фактическая функциональность - это только последняя строка. Вот источник:
источник
Это может быть несколько ограниченным решением, но оно выполняет работу, используя системную
diff
команду без внешних инструментов:--suppress-common-lines
(если вашаdiff
опция поддерживает эту опцию).diff
маркеры--width=term-width
; в Bash можно получить ширину как$COLUMNS
илиtput cols
.Это может быть также включено в вспомогательный git-скрипт для большего удобства, например, при использовании такого типа:
источник