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

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

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

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

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

Ответы [ 20 ]

31 голосов
/ 24 марта 2011

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

С TortoiseMerge:

  1. Найдите и откройте существующий каталог репозитория SVN
  2. Создайте новый каталог с именем "merges", если он еще не существует
  3. Скопируйте файл, к которому вы хотите применить файл .patch
  4. ДОБАВЬТЕ и УСТАНОВИТЕ в хранилище SVN, прежде чем перейти к следующему шагу
  5. Щелкните правой кнопкой мыши по слиянию и выберите Применить патч ...
  6. Дважды щелкните файл из списка
  7. Исправленный файл с diff отображается на правой панели
  8. Нажмите на эту панель и нажмите Сохранить или экспортируйте с помощью Файл-> Сохранить как ...

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

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

19 голосов
/ 28 сентября 2010

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

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

15 голосов
/ 19 апреля 2010

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

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

15 голосов
/ 28 февраля 2012

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

ОБНОВЛЕНИЕ : удобнее использовать его, если у вас установлен Python.

pip install patch
python -m patch
8 голосов
/ 05 февраля 2009

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

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

Удачи.

7 голосов
/ 08 января 2013

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

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

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

patch.exe -i <patchfile>

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

patch.exe --help
4 голосов
/ 01 декабря 2016

Утилита 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 к команде линия.

2 голосов
/ 06 февраля 2009

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

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

2 голосов
/ 10 мая 2010

Похоже, что 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)
1 голос
/ 12 сентября 2014

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

  • Выберите меню Файл -> Новый проект
  • В появившемся диалоговом окне сделайте его проектом Java-приложения . Введите имя в диалоговом окне и нажмите Готово .
  • Щелкните правой кнопкой мыши имя вашего проекта и выберите «Свойства» в контекстном меню
  • В появившемся диалоговом окне выберите Sources и добавьте Source Folder . Перейдите к своему источнику Java.

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

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

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

...