Инструмент визуального патча для Linux

У меня есть файл и патч для него. Хотелось бы визуально нанести патч, т.к. посмотрите, как изменения, предложенные патчем, выглядят в контексте, внесите некоторые исправления и сохраните полученный файл.

Какой инструмент может это сделать?

Ни один из инструментов визуального сравнения (например, meld, diffuse, diffmerge) не делает того, что я хочу: они не работают с патчами, они просто объединяют файлы целиком.


person Eugene Kirpichov    schedule 10.12.2009    source источник
comment
Привет, Юджин, что ты выбрал в итоге и как это сработало для тебя?   -  person stdcerr    schedule 23.10.2019


Ответы (9)


Мне очень нравится Kompare. Это просто (очень красивый) графический интерфейс для diff.

http://www.caffeinated.me.uk/kompare/

sudo apt-get install kompare

Создание и применение исправлений

Kompare может создать файл исправления, в котором перечислены только различия между двумя сравниваемыми текстовыми файлами A и B. Кроме того, Kompare может применить файл исправления, созданный таким образом, к исходному файлу A и, таким образом, пересчитать содержимое файла. соответствующий файл B. Это удобная утилита для передачи исправленной версии файла другу, у которого уже есть более старая версия того же файла, потому что должен быть доставлен только (относительно небольшой) файл исправления, а получатель может сгенерировать исправленный файл, применив патч к исходному файлу.

Патчи, созданные и применяемые Kompare, совместимы с файлами патчей, созданными или примененными утилитой diff интерфейса командной строки, потому что Kompare на самом деле является просто графическим интерфейсом для diff, а исправления создаются и применяются патчем, который вызывается Kompare .

person initzero    schedule 03.02.2011
comment
УРА! Kompare - действительно отличный инструмент. Обычно я использую GNOME, так что депы KDE до сих пор не позволяли мне его использовать, но оно того стоит. Единственное, чего ему не хватает, - это выделения Meld / TortoiseDiff различий в полях прокрутки, но я всегда могу использовать Meld для этого. - person detly; 04.02.2011
comment
Ага. Это того стоит, даже для пользователя GNOME, imo. :) - person initzero; 04.02.2011
comment
KOMPARE Сайт не работает. Альтернативный информационный сайт: en.wikipedia.org/wiki/Kompare - person Warren P; 28.10.2011
comment
Не знаю, просто установил и попытался открыть svn diff вывод. Понятно: bugs.kde.org/show_bug.cgi?id=252359 - person Jakub Bochenski; 14.08.2014
comment
Я не мог понять, как использовать его для применения патча, созданного с помощью относительного различия. Не было возможности выбрать папку, чтобы применить ее тоже. - person Dan M.; 03.07.2019

См. использование vimdiff с файлом сравнения.

gvim original.file +'vert diffpa the.patch'

Это откроет GVim и разделит окно с оригиналом слева и патчем, примененным справа. Затем вы можете добавлять, удалять или изменять блоки и сохранять изменения. (Что ж, если вы хотите создать new.patch, вам придется снова запустить diff, но это несложно.)

person ephemient    schedule 10.12.2009

Вы можете использовать режим emacs ediff. Это позволяет вам видеть и проверять каждый фрагмент в интерактивном режиме. Как бы то ни было, у меня в каталоге ~ / bin есть этот удобный скрипт:

#!/bin/bash
if [ "$1" == "--text" ] ; then shift; fi
if diff --brief $1 $2 ; then 
exit 0 
else
emacs -fn 8x13bold --eval '(ediff-files "'$1'" "'$2'")'
fi
person Pascal Cuoq    schedule 10.12.2009

Другой вариант: если вы используете Eclipse, вы можете создавать и применять исправления визуально.

person gorlok    schedule 03.02.2011
comment
Более конкретно: щелкните правой кнопкой мыши в проводнике проекта; выберите команду- ›Применить патч. - person FireAphis; 20.07.2011

Идея инструментов визуального сравнения заключается в том, что вы можете:

  1. сделайте резервную копию исправленного файла (или новую безупречную проверку всего дерева)
  2. применить патч
  3. используйте инструмент визуального сравнения, чтобы просмотреть изменения в контексте
  4. внесите любые желаемые изменения в исправленный файл с помощью инструмента визуального сравнения.

Некоторые инструменты, такие как meld или diffuse, будут автоматически отличаться от предыдущей зафиксированной версии файлов.

Ключевым моментом является то, что вы МОЖЕТЕ применить патч, они отбрасывают все, что вам не нравится, если у вас есть резервная копия или если вы работаете над чистой проверкой.

Если вы чувствуете себя более комфортно при чтении и изменении унифицированных различий и просто хотите иметь больше контекста для различий, у emacs есть довольно уникальная функция, а именно next-error-follow-mode при просмотре файла сравнения (основной режим сравнения). Это показывает контекст строки различий в целевом файле.

person ddaa    schedule 10.12.2009

На платформах, где Kompare (довольно приятная программа, если KDE - ваша чашка чая), я согласен, что Eclipse - отличный вариант.

Я постоянно был неохотным пользователем Eclipse, И меня неизменно впечатляет, насколько хорошо работают инструменты (после того, как платформа, наконец, запустится).

В Fedora у меня установлены почти все интерфейсы для каждого из основных механизмов контроля версий (SVN - также обслуживает мои машины с Windows, Mercurial, git и т. Д.); Meld довольно приятный (правда, без патчей интерфейса). Также хорошо работает Submerge. Но поскольку Eclipse знает, как применять патчи, и проект Working Copy был создан, как только я решил создать проект в папке, содержащей мою рабочую копию, он может стать моим любимым клиентским интерфейсом SVN.

person Barton    schedule 29.08.2011
comment
Обновление: я только что установил kdesvn и подключил его к своей рабочей копии wxWidgets ... Потребовалось довольно много времени (с очень низким приоритетом) для kdesvn, чтобы получить и кэшировать каждый журнал для истории проекта без запроса мои предпочтения по этому действию (по умолчанию получение журналов при открытии). Хммм - это безумие или Mercurial может улучшить отзывчивость с помощью определенного механизма? - person Barton; 10.09.2011

Обычно я использую GitExtensions (.NET и Mono), который также поддерживает интерактивное применение исправлений. Надеюсь, вы уже знакомы с git.

Изменить: все, что упомянуто ниже в этой строке, похоже, недоступно непосредственно в KDiff3. И как я уже упоминал ранее: я еще не пробовал.

GitExtension обычно использует KDiff3 в качестве инструмента сравнения, который может просматривать исправления.

http://kdiff3.sourceforge.net/doc/kpart.html

Используя его для исправлений, он имеет только два окна (редактировать) и не поддерживает слияние :( но он также поддерживает трехстороннее различие для полных папок и т. Д.

Собственно с патчами ни разу не пробовал.

person matthias.lukaszek    schedule 31.01.2011
comment
Как в KDiff3 открыть файл ориг и патч? - person detly; 01.02.2011
comment
Буду очень признателен, если вы ответите на предыдущий комментарий! - person llamerr; 18.11.2012

Выполняет ли xxdiff то, что вы ищете?

person hillu    schedule 10.12.2009

Я бы использовал смесь.

Создайте две копии файлов, одну без патча, а другую с патчем. Используйте meld для их сравнения, и вы сможете точно увидеть, что изменяет патч, и внести необходимые изменения.

Серьезно, почему это так сложно?

person MarkR    schedule 11.12.2009
comment
Потому что это не то, о чем просили. Если патч не будет правильно слиться, тогда не будет чистой версии для сравнения. - person speaker; 01.11.2010
comment
OP, как и я, когда я нашел этот вопрос, искал способ интерактивного применения патча, вероятно, потому, что некоторые блоки отклоняются при автоматическом применении. - person Chris Cleeland; 14.10.2011