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:
質問
私は何を間違えていますか?
デフォルトでは、patch
はターゲットファイル名のディレクトリ部分を無視します。現在の作業ディレクトリで「httpd.conf」を探しているだけです。完全なパスを使用する場合は、-p
オプションを使用して明示的に指定する必要があります。
patch -p 0 < httpd.patch
-p
の後の数字は、ファイル名パスから削除するレベルの数です。 -p N
は、スラッシュ番号Nまでのすべてを削除します。最初のスラッシュは番号1なので、-p 0
は「何も削除しない」ことを意味します。
ただし、一般的には、パッチファイルに完全なパスを使用することに頼らない方がよい場合があります。パッチは、異なるディレクトリレイアウトのファイルに対しても機能する場合、より一般的に役立ちます。パッチを実行する前に、いつでもファイルを含むディレクトリにcdできます(必要に応じて、フルパスを使用してパッチファイル自体を検索できます)。
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
sとrename
sを追跡しないことに注意してください。
TortoiseSVNを使用している場合、パッチを作成して適用するための使いやすいインターフェースがあります。
作成するには:
フォルダを右クリック-> TortoiseSVN->パッチを作成
出力ファイルを選択するように求められます
適用する場合:
フォルダを右クリック-> TortoiseSVN->パッチを適用
パッチを適用するファイルを選択し、必要に応じてマージするためのインターフェイスが表示されます。