0

我使用以下方法制作了一个补丁diff

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

我已将此 rakefile2.patch 放在另一个目录中:/home/user/onderzoeksstage/omf/confine/patches. 现在,我假设我可以转到收集所有补丁的目录,调用patch < rakefile2.patch并通过读取 rakefile2.patch 标头patch知道在哪里找到要修补的文件(原始文件)。/home/user/onderzoeksstage/omf/Rakefile

但是这样做时,patch它说它没有找到要修补的文件:

[user@localhost 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 的文件(例如在我的情况下),从而使其成为更“通用”的补丁?

谢谢,格伦

4

1 回答 1

1

补丁是否只查看路径末尾的文件名标题而不考虑目录?

这就是它默认的作用。参见-p选项中的描述man patch。看起来-p0就是你想要的。

于 2013-02-12T13:41:10.783 回答