Как сделать и применить патч 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 → Применить патч

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