Как я могу применить diff-патч в Windows? - PullRequest
129 голосов
/ 05 февраля 2009

Существует множество программ, которые могут создать патч для различий, но у меня есть куча времени, когда я пытаюсь его применить. Я пытаюсь распространить патч, и у меня есть вопрос от пользователя о том, как его применить. Поэтому я попытался выяснить это самостоятельно и обнаружил, что понятия не имею, и большинство инструментов, которые я могу найти, это командная строка. (Я могу справиться с командной строкой, но многие люди будут потеряны без хорошего, дружественного графического интерфейса. Так что это не годится для этой цели.)

Я пытался использовать TortoiseSVN. У меня есть патч, который я хотел бы применить. Я щелкаю правой кнопкой мыши на патче, и в подменю TortoiseSVN есть опция «Применить патч». Все, что он делает, это поднимает пустое окно.

Итак, я попытался нажать Open. У него есть два варианта: объединить и применить унифицированный diff. (К счастью, патч находится в унифицированном формате diff.) Но опция apply просто не работает: она запрашивает патч и папку. Каким-то образом он забыл запросить файл для применения патча к! Так что TortoiseSVN просто не работает. Существует ли утилита на базе графического интерфейса Windows, которая возьмет исправление и файл и правильно его применяет?

РЕДАКТИРОВАТЬ: Глядя на ответы до сих пор, кажется, что черепаха будет делать это правильно, только если это файл, который уже версионирован. Это не тот случай, здесь. Мне нужно иметь возможность применить патч к файлу, который не вышел из репозитория SVN. Я только что попробовал использовать Tortoise, потому что случайно узнал, что SVN использует diff и должен знать, как их создавать и применять.

Ответы [ 20 ]

1 голос
/ 12 июня 2013

Eclipse должен быть в состоянии сделать это, перейти к перспективе TeamSynchronize и затем в Project-> Apply patch

1 голос
/ 08 мая 2013

Если вы используете Mercurial , это делается через «импорт». Таким образом, в командной строке, команда hg import, или (вы можете найти полезной опция --no-commit), или "Repository" => "Import ..." в Hg Workbench.

Обратите внимание, что они будут фиксировать изменения по умолчанию; Вы можете избежать этого, используя опцию hg import --no-commit, если используете командную строку или если вы использовали Hg Workbench, может оказаться полезным ввести hg rollback после слияния.

1 голос
/ 05 февраля 2009

Патч сообщает, к какому файлу обращаться. Заголовок должен быть примерно таким (просмотрите его в Блокноте или в вашем любимом текстовом редакторе):

--- Folder/old_file
+++ Folder/new_file

В случае патча Subversion у вас также будут номера ревизий (поскольку имена файлов совпадают).

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

0 голосов
/ 13 декабря 2017

Просто используйте:

patch -p0 < path-file.patch

не забудьте выполнить эту команду только из папки, в которой вы создали патч.

0 голосов
/ 27 июня 2017

Я использую MSYS2 из http://www.msys2.org/

Он предоставляет множество утилит, таких как patch, which, git, tree и многие другие.

После установки MSYS2 просто запустите менеджер пакетов, чтобы установить patch:

pacman -S patch
0 голосов
/ 26 июля 2016

Я уже использую BeyondCompare (коммерческий) для различий и слияний, и этот инструмент также имеет возможность для создания, просмотра и применения патчей.

0 голосов
/ 25 июля 2015

A Порт BusyBox для Windows имеет команды diff и patch, но они поддерживают только унифицированный формат.

0 голосов
/ 24 августа 2013

Если появляется сообщение об ошибке «Не рабочая копия», попробуйте выбрать каталог из диалогового окна TortoiseMerge, который является рабочим каталогом SVN.

0 голосов
/ 05 февраля 2009

При применении исправлений с помощью TortoiseSVN я обычно сохраняю путь в корне извлеченного репозитория. После этого вы сможете щелкнуть правой кнопкой мыши патч, перейти в меню TortoiseSVN и нажать ApplyPatch. ApplyPatch должен автоматически определить, на каком уровне иерархии каталогов был создан патч.

Однако в прошлом у меня были проблемы с применением исправлений, содержащих новые файлы или переименовывающих файлы. Какой бы алгоритм ни использовала Tortoise для этого, похоже, не очень хорошо справляется с этими сценариями. Unicode может дать вам аналогичные проблемы.

0 голосов
/ 19 июля 2011

У вас есть два монитора? У меня была та же проблема с TortoiseMerge, и я понял, что когда я отключил один из мониторов, появилось небольшое окно со списком файлов. Надеюсь, это поможет вам.

...