2013-02-12 153 views
0

我用diff做出了補丁:補丁語義

diff -u /home/user/onderzoeksstage/omf/Rakefile /home/user/onderzoeksstage/Rakefile > rakefile2.patch 

我放在這個rakefile2.patch在另一個目錄:/home/user/onderzoeksstage/omf/confine/patches。 現在,我假設我可以訪問收集所有補丁的目錄,通過讀取rakefile2.patch標頭,可以調用patch < rakefile2.patchpatch來知道在哪裏找到要修補的文件(原始文件/home/user/onderzoeksstage/omf/Rakefile)。

但是這樣做的時候,patch說,它沒有找到該文件補丁:

[[email protected] patches]$ patch < rakefile2.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: 
-------------------------- 
|--- /home/user/onderzoeksstage/omf/Rakefile 2013-02-12 14:11:49.809792527 +0100 
|+++ /home/user/onderzoeksstage/Rakefile 2013-02-12 12:17:50.314831492 +0100 
-------------------------- 
File to patch: ... 
... 

所以我的假設是明顯錯誤的,但它是如何工作的patch? 當去/home/user/onderzoeksstage/omf/和呼叫patch < rakefile2.patch確實工作。 patch僅查看路徑末尾的文件名標題,而沒有考慮目錄?那麼我試圖完成的事情將永遠不會奏效? 這是爲什麼;這是因爲這種方式可以將修補程序應用於任何名爲Rakefile的文件(例如,在我的情況下),因此使其成爲更通用的修補程序?

感謝, 格倫

回答

1

是否補丁只能看在 路徑末端頭的文件名,並沒有考慮到的目錄?

這就是默認設置。請參閱man patch-p選項的說明。看起來像-p0就是你想要的。

+0

是的,我認爲是相同的,並嘗試這個(patch -p0 atobi 2013-02-12 14:02:31

+0

這可能是某種安全/可預測性。你總是可以'cd /'並使用'patch -p1'(它將去掉前導斜槓並將其餘部分作爲「相對」路徑使用,當'/'爲當前目錄時,它將與絕對路徑相同)。 – 2013-02-12 14:07:05