У меня есть некий скрипт, который формирует 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 -
Теперь запустим Midnight Commander (mc):
Я запустил его в той директории, где лежит
data.diff
, а затем в левом табе я зашёл внутрь diff-файла словно в директорию (обратите внимание на путь в левом табе:
data.diff/patchfs://foo-#1/bar
).
Теперь откроем виртуальный файл изменений только для файла
foo-#1/bar/bar
:
Таким образом видим, что программы разделяют diff-файл на кусочки, соответствующие разным файлам, отображают дерево этих файлов и позволяют переключаться между ними, просматривая изменения для каждого из них индивидуально.
Ещё раз поясню, чем мне не подходят вышеприведённые варианты:
- Kompare не позволяет копировать текст, можно лишь смотреть. Совсем не подходит.
- mc, в принципе, подходит всем, но это консольное приложение. Мне было бы намного удобнее использовать GUI приложение.