Делаем diff разборчивее

12

Я ищу инструмент, который будет принимать вывод diff / debdiff ( а точнее, вывод этого скрипта ) и отображать результаты сравнения в удобочитаемой графической форме. Любые указатели будут оценены.

В идеале это будет GTK +, FOSS-эквивалент MDR .

Meld, Diffuse и аналогичное программное обеспечение не подходят для этой цели, так как они предназначены для автономной работы и не принимают ввод от stdin.

mgunes
источник

Ответы:

8

Kompare может сделать это (и является лучшим GUI diff-viewer IMO):

./whatchanged package_name | kompare -

Обратите внимание на '-', данное в качестве аргумента входного файла. Большинство программ * nix имеют этот интерфейс для приема вводимых по трубопроводу данных, поэтому вы можете использовать любой из них, который вам нравится.

scottl
источник
Да, я пробовал это с Meld, но происходит то, что Meld запускается немедленно и получает промежуточный вывод скрипта, вместо того, чтобы запускаться после завершения скрипта и получения вывода diff. Возможно, мне нужно настроить поток скрипта для правильной работы с Meld и другим программным обеспечением, к которому он подключен. А с "bzr diff" и регулярным выводом diff, Meld запускается в режиме VCS, а не в режиме сравнения файлов.
mgunes
Я решил проблему с режимом VCS, запустив Meld с опцией -a. Компаре тоже работает. Все, что осталось, - это сделать скрипт понятным.
mgunes
3

Если у вас есть только консоль, colordiffэто довольно хорошее решение.

Чтобы установить его, запустите эту команду sudo apt-get install colordiffв терминале

Mnementh
источник
2

Мне нравится использовать внутреннюю подсветку синтаксиса vim в качестве пейджера, чтобы я мог просматривать цветные различия. Например, поместив это в ваш .bashrc:

sudo apt-get install vim
alias vless='vim -u /usr/share/vim/vimcurrent/macros/less.vim'

(И затем повторно отправьте ваш .bashrcс . ~/.bashrc.) Затем вы можете запустить vlessкак пейджер:

vless /path/to/your.diff

Это не графический, но, по крайней мере, выделен.

Кис Кук
источник
Но он не просил цветные файлы сравнения, он попросил графические различия. Что намекает на то, что вам нужно иметь возможность читать исходные файлы столько же, сколько и сам diff.
Мартин Оуэнс -доктормо-
Ну, "читать с stdin" было требованием. Если «Мелд» был исключен, то осталось немного. Другой ответ, который создает diff и открывает Meld, - лучший выбор для графического. Или это может начать geditвместо этого.
Кис Кук
вы не помещаете "sudo apt-get install vim" в ваш .bashrc, пожалуйста, отредактируйте, чтобы было понятно.
Capi Etheriel
2

Хотя приложение KDE может быть установлено без слишком большого количества зависимостей, kdiff является отличным инструментом для редактирования и объединения различий.

Йоханна Ларссон
источник
1
Хотя kdiff (он же kdiff3 в архиве ubuntu) является отличным инструментом, он также не удовлетворяет вопрос OP, поскольку они ищут инструмент, который возьмет diff на STDIN и покажет его, и из ограниченного изучения, которое я сделал, Я не мог найти способ заставить это сделать это. Кроме того, если проблема заключается в уменьшении зависимостей KDE, архив ubuntu включает в себя kdiff3-qt, который зависит только от qt, а не от библиотек из стека KDE.
Стив Битти
2

Я бы использовал этот простой скрипт для использования meld (или любого другого существующего инструмента), так что вы получите немного гибкости:

#!/bin/bash

TMPDIR=`mktemp -d`
DIFF_FILE=`mktemp`
TARGET='./'

cat /proc/$$/fd/0 > $DIFF_FILE
cd $TARGET
rsync -apvz --delete --stats --compress --progress $TARGET $TMPDIR
patch -R -p0 -d $TMPDIR < $DIFF_FILE
meld $TARGET $TMPDIR

Протестировано с meld и выводом из bzr diff, поэтому скопировал это в / usr / bin и chmod 755, и я сделал это:

bzr diff | meld-diff

Результаты показывают, как ожидалось.

Мартин Оуэнс -доктормо-
источник
4
Хотя это не такая большая проблема на однопользовательских машинах, вы должны использовать mktempи безопасно mktemp -dгенерировать временные файлы и каталоги, если не по какой-либо другой причине, кроме как для того, чтобы вы могли выполнять сравнения на нескольких деревьях одновременно без единого дублирования. другой.
Стив Битти
Работает с bzr diff, но только в режиме сравнения каталогов. Я хочу иметь возможность сравнивать отдельные файлы. Я постараюсь уточнить его, чтобы он действительно работал с моим сценарием, чего в данный момент нет; Благодарю.
mgunes
Напишите мне, если вы считаете, что моя идея использования сценария хорошая. До сих пор меня слишком сильно унизили.
Мартин Оуэнс -доктормо-
1

Я знаю, что вы не просите инструмент сравнения, интегрированный в редактор, но я уверен, что вы можете избежать переключения контекста (из редактора в терминал и обратно в редактор) после того, как узнаете немного о том, что может предоставить ваш редактор. И emacs, и vim поставляются с инструментами сравнения.

  • В случае emacs вы будете использовать Ediff Mode (по умолчанию). Посмотрите на эту вики-страницу или обратитесь к официальному руководству

  • Использовать emacs просто, просто введите Alt + xи введите ediff.

  • Вы можете использовать ediff для просмотра различий между ветками и ревизиями вашего хранилища (bzr, git, svn и т. Д.).

crncosta
источник
Не могли бы вы показать быстрый пример того, как отредактировать удаленно отслеживаемую ветку git с текущей рабочей копией (несколькими файлами)?
мл