2012-04-26 114 views
20

我想爲httpd.conf製作一個SVN類型的補丁文件,這樣我就可以輕鬆將它應用到其他主機。如何製作和應用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: 

問題

我在做什麼錯?

回答

32

默認情況下,patch忽略目標文件名的目錄部分;它只是在你當前的工作目錄中尋找「httpd.conf」。如果你想使用的完整路徑,你要明確的告訴它與-p選擇這樣做:

patch -p0 < httpd.patch

-p後的數字告訴它多少級,從文件名路徑中刪除; -p N去掉所有的一切直到幷包括斜槓數字N.第一個斜槓是數字1,所以-p0的意思是「不要去掉任何東西」。)

一般來說,你最好不要依賴完整路徑在補丁文件中,雖然;如果補丁程序對於不同目錄佈局的文件起作用,該補丁程序將更爲普遍。在運行修補程序之前,您可以隨時cd到包含該文件的目錄中(如果需要,可以使用完整路徑查找修補程序文件本身)。

30

使用svn patch

案例1:使用/usr/bin/patch

svn diff > $TMPDIR/mypatchfile.patch 
cd myOtherCheckOut 
patch -p0 < $TMPDIR/mypatchfile.patch 

應用的更改以及如果沒有添加/刪除的文件通過svn addsvn delete

案例2:使用svn patch

svn diff > $TMPDIR/mypatchfile.patch 
cd myOtherCheckOut 
svn patch $TMPDIR/mypatchfile.patch 

曲目也添加和刪除文件。

注意,無論是軌道svn move S和rename小號

3

如果你使用TortoiseSVN有一個簡單易用的界面來創建和應用補丁。

要創建:

在文件夾右鍵 - > TortoiseSVN的 - >創建補丁

系統會提示您選擇一個輸出文件

申請:

右鍵單擊文件夾 - > TortoiseSVN - >應用補丁

系統將提示您使用界面來選擇要應用修補程序的文件,並在需要時進行合併。