Интерактивное сравнение в git-е

7 ноября, 22:19 / git, Perl, diff

Когда я перешёл с Mercurial-а на git, меня постигло небольшое разочарование: я не нашёл аналога расширению extdiff. А конфигурационный параметр diff.external работал не так, как я этого ожидал.

Зачем нужен extdiff и как он работает? Это расширение позволяет использовать внешние программы для сравнения файлов. Преимуществ перед внутренним diff-ом несколько:

extdiff создаёт две временные директории, воссоздаёт в них структуру сравниваемых commit-ов и запускает внешнюю программу для сравнения этих двух папок. После завершения те файлы что были взяты из рабочей директории (разумеется, если это имело место быть) возвращаются назад.

git работает иначе: он запускает diff.external отдельно для каждой пары изменённых файлов. И всё.

Решение проблемы. В общем-то, git прав, поскольку работает по принципу KISS. Но от этого не легче. Поиск готового решения привёл к GitDiff.bat и GitDiff.rb, которые меня не устроили как минимум по причине зависимостей от Ruby и Windows-а. И я решил написать своё на Perl-е.

Предлагаю вашему вниманию скрипт git-idiff. Для начала работы переопределите переменную $diff и вызов вашей любимой программы для сравнивания (в коде есть примеры). Запускать так же как и git diff, например:

	git-idiff --cached

Поскольку git для работы требует Perl, то для работы git-idiff-а у вас уже всё есть. Работоспособность проверялась на GNU/Linux-е с git-ом версии 1.6.2.1 и на Windows-е XP с msysGit-ом версии 1.6.5.1. При использовании Perl-а из пакета msysGit-а есть некоторые нерешённые проблемы.

Комментарии

Комментирование временно отключено.

vti 7 ноября, 23:30
А как же vimdiff? Или я чего-то не понимаю =/
Дмитрий Валерьевич 8 ноября, 00:05
Если фразу "боб о бок" из строчки 
"—сравнение файлов «боб о бок» (side by side) — иногда это нагляднее;"
Произнести быстро несколько раз, то можно поднять себе настроение :)