web-dev-qa-db-ja.com

SVNパッチの作成および適用方法

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: 

質問

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

35

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

patch -p 0 < httpd.patch

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

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

46
Mark Reed

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を追跡しないことに注意してください。

56
Fox

TortoiseSVNを使用している場合、パッチを作成して適用するための使いやすいインターフェースがあります。

作成するには:

フォルダを右クリック-> TortoiseSVN->パッチを作成

出力ファイルを選択するように求められます

適用する場合:

フォルダを右クリック-> TortoiseSVN->パッチを適用

パッチを適用するファイルを選択し、必要に応じてマージするためのインターフェイスが表示されます。

5
James Wierzba