Как применить исправление 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
Помните, что выполните эту команду только из папки, в которой вы создали патч.