Задать вопрос
@thewizardplusplus

Каким инструментом можно просмотреть уже готовый diff-файл?

У меня есть некий скрипт, который формирует diff так, как мне это нужно (определённым образом выбираются коммиты для сравнения, задаются требуемые настройки). Результат работы скрипта хотелось бы просматривать не в консоли, а в некотором GUI.

То есть мне нужен инструмент, который принимает на вход уже готовый diff-файл и просто отображает его. Главное требование — это разделять diff по файлам и отображать раздельно для каждого файла. Желательно иметь подсветку синтаксиса diff (чтобы удалённые строчки отличались от добавленных цветом, а не только знаком в начале). Также очень важно иметь возможность копировать текст из просмоторщика, хотя бы построчно.

Я думал, что подобных инструментов много. Однако, перебрав почти все утилиты из списка, выдаваемого на моей платформе командой git difftool --tool-help, смог найти требуемый режим только в программе Kompare (cat data.diff | kompare -).

К сожалению, Kompare не поддерживает копирование текста, можно лишь смотреть. И как пишет его разработчик, данная функциональность не появится — для этого требуется переписать вообще всё отображение.

Может есть какая-нибудь другая альтернатива для данной задачи? Ещё раз подчеркну, что мне не нужен генератор diff, нужен только просмоторщик.

Платформа: Linux (Kubuntu). Но лучше кроссплатформенный, чтобы можно было запустить ещё как минимум на Windows.

Пример использования

Допустим, имеется следующий diff-файл по именем data.diff:

diff --unified -r foo-#1/bar/bar.md foo-#2/bar/bar.md
--- foo-#1/bar/bar.md	2016-04-30 00:04:13.176644057 +0300
+++ foo-#2/bar/bar.md	2016-04-30 00:03:51.864644969 +0300
@@ -1,7 +1,9 @@
 # Bar
 
 * bar record **#1**;
-* bar record **#2**;
+* bar record **#2**:
+	* bar record **#2.1**;
+	* bar record **#2.2**;
 * bar record **#3**;
 * bar record **#4**;
 * bar record **#5**;
diff --unified -r foo-#1/baz/baz.md foo-#2/baz/baz.md
--- foo-#1/baz/baz.md	2016-04-30 00:04:07.152644315 +0300
+++ foo-#2/baz/baz.md	2016-04-30 00:03:48.048645132 +0300
@@ -3,6 +3,10 @@
 * baz record **#1**;
 * baz record **#2**;
 * baz record **#3**;
-* baz record **#4**;
+* baz record **#4**:
+	* baz record **#4.1**;
+	* baz record **#4.2**;
+	* baz record **#4.3**;
+	* baz record **#4.4**;
 * baz record **#5**;
 * baz record **#6**.


Запустим Kompare:

cat data.diff | kompare -

816c26570f984a9f8084e8d06f3fdfd0.png

Теперь запустим Midnight Commander (mc):

cd8bf39531854ce69bf361b726d7ba94.png

Я запустил его в той директории, где лежит data.diff, а затем в левом табе я зашёл внутрь diff-файла словно в директорию (обратите внимание на путь в левом табе: data.diff/patchfs://foo-#1/bar).

Теперь откроем виртуальный файл изменений только для файла foo-#1/bar/bar:

fdef77609452476dac92aaba528c28a8.png

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

Ещё раз поясню, чем мне не подходят вышеприведённые варианты:

  • Kompare не позволяет копировать текст, можно лишь смотреть. Совсем не подходит.
  • mc, в принципе, подходит всем, но это консольное приложение. Мне было бы намного удобнее использовать GUI приложение.
  • Вопрос задан
  • 514 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
В mc можно заходить в .diff как в каталог с патчами
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@rettpop
> vim <src file>
после открытия выполняешь:
:vert diffpa <путь к patch файлу>

либо можно сразу из командной строки:
> vim <src file> +'vert diffpa <путь к patch файлу>'


На Windows не проверял, но предполагаю, что должно работать так же.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы