Как применить исправление diff в Windows?

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

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

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

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

Ответ 1

Применить патч

С TortoiseMerge:

  • Найти и открыть существующий каталог репозитория SVN
  • Создайте новый каталог с именем "merges", если он уже не существует
  • Скопируйте файл, на который вы хотите применить файл .patch
  • ADD и COMMIT в репозиторий svn, прежде чем переходить к следующему шагу
  • Щелкните правой кнопкой мыши по слияниям и выберите Применить патч...
  • Дважды щелкните файл из списка
  • Патч файл с diff отображается в правой панели
  • Нажмите на эту панель и нажмите Сохранить или экспортируйте с помощью Файл- > Сохранить как...

Альтернативный экран, если вы открываете из TortoiseMerge. В скрининге ниже каталог ссылается на каталог "merges", упомянутый на шаге 2 выше: Screeny

Снимок экрана графического интерфейса WinMerge: Screeny

Ответ 2

TortoiseMerge - это отдельная утилита, поставляемая вместе с TortoiseSVN.

Его также можно скачать отдельно в архиве TortoiseDiff.zip. Это позволит вам применять унифицированные различия к файлам без версии.

Ответ 3

Я сделал чистый инструмент Python именно для этого. Это предсказуемое кросс-платформенное поведение. Хотя он не создает новые файлы (на момент написания этого) и не имеет графического интерфейса, его можно использовать в качестве библиотеки для создания графического инструмента.

UPDATE. Должно быть более удобно использовать его, если у вас установлен Python.

pip install patch
python -m patch

Ответ 4

Я знаю, что вы сказали, что предпочитаете графический интерфейс, но инструменты командной строки прекрасно справятся с работой. См. GnuWin для порта инструментов unix для Windows. Очевидно, вам понадобится команда patch, -)

Однако вы можете столкнуться с проблемой завершения строки. Порт GnuWin предполагает, что файл патчей имеет завершение строки стиля DOS (CR/LF). Попробуйте открыть файл патча в разумно интеллектуальном редакторе, и он преобразует его для вас.

Ответ 5

В TortoiseSVN исправление применяется. Вам необходимо применить патч к тому же каталогу, в котором он был создан. Всегда важно помнить об этом. Итак, как вы это делаете в TortoiseSVN:

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

Удачи.

Ответ 6

Вы можете использовать этот родной порт Win32 для утилиты patch.

Он поставляется вместе с большим выбором других утилит, и в отличие от Cygwin и подобных ему не нужны библиотеки DLL или подобные. Просто выберите свой крошечный исполняемый файл и сохраните его там, где хотите.

Простое использование:

patch.exe -i <patchfile>

Получить дополнительную помощь:

patch.exe --help

Ответ 7

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

Вы можете установить Cygwin, а затем использовать инструмент исправления командной строки для применения исправления. См. Также эту страницу руководства Unix, которая применяется к патчу.

Ответ 8

Похоже, что TortoiseSVN (TortoiseMerge) требует строку Index: foobar.py в файле diff/patch. Это то, что мне нужно было сделать, чтобы файл исправления не-TortoiseSVN работал с TortoiseSVN правой кнопкой мыши команду Apply Patch.

До:

--- foobar.py.org   Sat May 08 16:00:56 2010
+++ foobar.py   Sat May 08 15:47:48 2010

После:

Index: foobar.py
===================================================================
--- foobar.py
+++ foobar.py   (working copy)

Или, если вы знаете конкретную версию, с которой работал ваш вкладчик:

Index: foobar.py
===================================================================
--- foobar.py   (revision 1157)
+++ foobar.py   (working copy)

Ответ 9

Утилита patch.exe из установки Git работает в Windows 10.

Установите Git для Windows, затем используйте команду "C:\Program Files\Git\usr\bin\patch.exe" для применения патча.

Если какое-либо сообщение об ошибке, подобное Hunk #1 FAILED at 1 (different line endings)., было получено на выходе во время применения патча, попробуйте добавить к команде -l (это ярлык для --ignore-whitespace) или --binary. линия.

Ответ 10

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

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

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

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

Ответ 11

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

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

Ответ 12

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

Ответ 13

Для проектов Java я использовал NetBeans для применения файлов исправлений. Если код Java, который вы исправляете, уже не является проектом NetBeans, создайте для него проект. Чтобы создать новый проект:

  • Выберите меню Файл → Новый проект
  • В появившемся диалоговом окне сделайте проект Java Application. Дайте ему имя в диалоговом окне и нажмите Finish.
  • Щелкните правой кнопкой мыши имя вашего проекта и выберите "Свойства" в контекстном меню
  • В появившемся диалоговом окне выберите "Источники" и добавьте исходную папку. Перейдите к источнику Java.

Теперь, когда у вас есть проект, примените патч:

  • Выделите свой проект, чтобы выбрать его
  • В главном меню выберите меню Сервис → Применить Diff Patch
  • В появившемся диалоговом окне найдите файл исправления, выберите его и нажмите кнопку "Патч".

Что это. Патч должен быть применен, и вы должны увидеть окно diff, показывающее изменения.

Ответ 14

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

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

Ответ 15

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

Ответ 16

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

Ответ 17

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

Ответ 18

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

Ответ 19

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

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

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

pacman -S patch

Ответ 20

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

patch -p0 < path-file.patch

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