我用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.patch
和patch
來知道在哪裏找到要修補的文件(原始文件/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的文件(例如,在我的情況下),因此使其成爲更通用的修補程序?
感謝, 格倫
是的,我認爲是相同的,並嘗試這個(patch -p0
atobi
2013-02-12 14:02:31
這可能是某種安全/可預測性。你總是可以'cd /'並使用'patch -p1'(它將去掉前導斜槓並將其餘部分作爲「相對」路徑使用,當'/'爲當前目錄時,它將與絕對路徑相同)。 – 2013-02-12 14:07:05