我正在尝试创建简单的补丁,但文件位于不同的目录中。
我的目录结构是:
/-|hello_new.c
|-1/-|
|-2/-|
|-3/hello.c
//hello_new.c:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello World\n");
}
//hello.c:
#include <stdio.h>
int main()
{
printf("Hello World\n");
}
我使用以下方法创建补丁:
diff -u 1/2/3/hello.c hello_new.c > hello.patch
我的补丁文件是hello.patch:
--- 1/2/3/hello.c 2016-02-09 13:31:04.904763020 +0530
+++ hello_new.c 2016-02-08 18:35:47.299940190 +0530
@@ -1,6 +1,5 @@
#include <stdio.h>
-int main()
-{
+int main(int argc, char *argv[]) {
printf("Hello World\n");
}
现在我使用以下方法应用补丁:
patch < hello.patch
但我得patching file hello_new.c
检测到反转补丁。
答案 0 :(得分:1)
您可以使用patch
的{{3}}来解决此问题:
-p
号码
--strip=
号
将文件名条带计数设置为 number 。请参阅-p
option。
如果补丁文件中的前/后级别不同,请记住patch
优先于前部分中的级别数(标题的第一行) )。所以你可以做到
patch -p3 < hello.patch
避免此实例的反向补丁问题。
这是GNU补丁,您可以通过添加--dry-run
选项来预览结果(以避免对反向补丁消息给出正确响应的麻烦):
$ patch -p3 --dry-run < hello.patch
patching file hello.c
Hunk #1 succeeded at 2 with fuzz 2 (offset 1 line).
测试补丁时,例如,如果它们与完全不匹配(例如制表符/空格转换,回车换行符),我会预览补丁,并可能添加{{1}帮助-l
减少拒绝的选项。