53

httpd.conf他のホストに簡単に適用できるように、SVN タイプのパッチ ファイルを作成したいと考えています。

私が行った場合

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: 

質問

私は何を間違っていますか?

4

3 に答える 3

78

を使用し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 moves とrenames のどちらも追跡しないことに注意してください。

于 2013-07-16T14:11:53.067 に答える
52

デフォルトでpatchは、ターゲット ファイル名のディレクトリ部分は無視されます。現在の作業ディレクトリで「httpd.conf」を探しているだけです。フル パスを使用する場合は、次のオプションを使用して明示的に指定する必要があり-pます。

patch -p 0 < httpd.patch

後の数字-pは、ファイル名パスから削除するレベル数です。-p N スラッシュ番号 N までのすべてを削除します。最初のスラッシュは番号 1 であるため、-p 0「何も削除しない」ことを意味します。

ただし、一般的には、パッチ ファイルにフル パスが含まれていることに依存しない方がよい場合があります。異なるディレクトリ レイアウトのファイルに対しても機能する場合、パッチはより一般的に役立ちます。patch を実行する前に、いつでもファイルを含むディレクトリに cd できます (必要に応じて、フル パスを使用してパッチ ファイル自体を見つけます)。

于 2012-04-26T12:53:50.203 に答える