Как сделать и применить патч SVN?
Я хотел бы создать файл патча типа SVN для httpd.conf
, чтобы я мог легко применить его к другим хостам.
Если я делаю
cd /root
diff -Naur /etc/httpd/conf/httpd.conf_original /etc/httpd/conf/httpd.conf > httpd.patch
cp /etc/httpd/conf/httpd.conf_original /etc/httpd/conf/httpd.conf
patch < httpd.patch
Я получаю:
can't find file to patch at input line 3
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|--- /etc/httpd/conf/httpd.conf_original 2012-04-26 13:36:08.331068438 +0200
|+++ /etc/httpd/conf/httpd.conf 2012-04-26 14:27:36.857075085 +0200
--------------------------
File to patch:
Вопрос
Что я делаю неправильно?
Ответы
Ответ 1
По умолчанию patch
игнорирует часть каталога целевого имени файла; он просто ищет "httpd.conf" в вашем текущем рабочем каталоге. Если вы хотите, чтобы он использовал полный путь, вы должны явно попросить его сделать это с помощью опции -p
:
patch -p0 < httpd.patch
(Число после -p
указывает, сколько уровней нужно удалить из пути имени файла; -p N
удаляет все, вплоть до косой черты N.)
В общем, вам может быть лучше не полагаться на полный путь в файле исправлений; патч будет более полезен, если он работает даже для файлов в другом макете каталога. Вы всегда можете записать cd в каталог, содержащий файл, перед запуском патча (и использовать полный путь для поиска самого файла исправления, если это необходимо).
Ответ 2
Используйте svn patch
.
Случай 1: с помощью /usr/bin/patch
:
svn diff > $TMPDIR/mypatchfile.patch
cd myOtherCheckOut
patch -p0 < $TMPDIR/mypatchfile.patch
Хорошо применяет ваши изменения, если нет добавленных/удаленных файлов через svn add
или svn delete
Случай 2: с помощью svn patch
:
svn diff > $TMPDIR/mypatchfile.patch
cd myOtherCheckOut
svn patch $TMPDIR/mypatchfile.patch
Треки добавлены и удалены файлы.
Обратите внимание, что ни треки svn move
, ни rename
s
Ответ 3
Если вы используете TortoiseSVN, есть простой в использовании интерфейс для создания и применения патча.
Чтобы создать:
Щелкните правой кнопкой мыши по папке → TortoiseSVN → Создать патч
Вам будет предложено выбрать выходной файл
Чтобы применить:
Щелкните правой кнопкой мыши по папке → TortoiseSVN → Применить патч
Появится запрос с интерфейсом, чтобы выбрать файл для применения патчей к ним и слить, если это не рекомендуется.