Цветной, бок о бок, встроенный вывод git diff в моем терминале

Обратите внимание, что этот вопрос не является дубликатом, а является продолжением вопроса "Как я могу получить параллельный diff, когда я делаю "git diff"?". Этот вопрос ищет новую информацию и решение проблемы.

Кроме того, обратите внимание, что я ищу только решения, вывод которых встроен в терминал, как по умолчанию git diff - мне не нужно ничего, что открывает внешнюю программу сравнения графического интерфейса.

Прогресс до сих пор

Я последовал предложению из вопроса SO, связанного выше, и поместил на свой путь следующий исполняемый файл:

#!/bin/bash

# side-by-side diff with custom options:
sdiff -w200 -l "$2" "$5" 

Затем я могу проверить это так, например:

GIT_EXTERNAL_DIFF=mydiff git diff HEAD HEAD~1

и я получу вывод следующим образом:

Скриншот

Проблема

По замыслу это:

  • встроенный в терминал
  • бок о бок вывод

Однако у него есть пара проблем:

  • Если изменилось более одного файла, он умирает после обработки первого файла, выдавая ошибку fatal: external diff died, stopping at <filename>
  • Вывод не использует зеленый/красный цвета для отображения нового кода/удалений.

Есть ли способ исправить эти две проблемы с sdiff? Если нет, есть ли способ сделать это с помощью /usr/bin/diff, встроенной программы git diff или другой терминальной программы? Мне все равно, как я достигну цели. Я просто хочу встроенный, бок о бок с цветом.


person Jonah    schedule 06.04.2018    source источник
comment
Если есть способ сделать это из терминала, было бы очень здорово. Но в качестве обходного пути у вас есть доступ к IDE, такой как IntelliJ? В IntelliJ есть отличный инструмент сравнения, который хорошо работает с Git.   -  person Tim Biegeleisen    schedule 06.04.2018


Ответы (1)


[ЭТО] отлично работало для меня, даже с цвета. (Спасибо @ github.com/cockroachdb/cockroach)

Если на вашем терминале возникают проблемы с отображением цветов с помощью sdiff, вы, вероятно, захотите направить sdiff в colordiff, например:

sdiff -w200 -l "$2" "$5" | colordiff | grep -E ...
person fuma    schedule 06.04.2018
comment
ТЫВМ! Все еще есть пара незначительных проблем после настройки icdiff. 1. Согласно моему сообщению, в моем сценарии mydiff bash у меня теперь есть icdiff --unified=2 --line-numbers "$2" "$5" (оболочка bash, кажется, необходима, чтобы сохранить его встроенным). Это работает, однако имена файлов в выводе icdiff выглядят странно, например, /var/folders/r5/tx39k3394y99z55mzn683ypr0000gn/T//iyhopb_authn_ldap.gemspec. Кроме того, для более чем одного экрана вывода мне нужно нажать q, когда он закончится, чтобы вернуть подсказку. Любые идеи по устранению этих проблем? - person Jonah; 06.04.2018
comment
Оказывается, icdiff --unified=2 --line-numbers -L "$1" -L "$1" "$2" "$5" решает проблему с именами. И --no-pager решит проблему q, но, если подумать, я не думаю, что на самом деле хочу этого, и в любом случае это поведение по умолчанию для git-diff - person Jonah; 06.04.2018