源代码树包含修改后的 dnsmasq-2.80test4 源(和 git 文件)。
现在,我想在用户主文件夹中工作时,使用diff
和将最新的 2.86 dnsmasq 源代码应用于修改后的 2.80test4。patch
因此,我开始将 .../dnsmasq-2.80test4 复制到用户主目录,并使用以下命令创建 diff 文件:
~$ diff -urN ./dnsmasq-2.80test4 ./dnsmasq-2.86 > dnsmasq-2.86.diff
然后我尝试~/dnsmasq-2.80test4
使用以下方法修补旧文件夹:
~$ cd ./dnsmasq-2.80test4
~$ patch --dry-run -i ../dnsmasq-2.86.diff
对于 CHANGELOG、FAQ、Makefile 和 Version 运行正常。Android.mk
子目录中的第一个文件bld
失败,这不是什么大问题。真正的破坏者是同一子目录中的第二个文件:
can't find file to patch at input line 466
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|diff -ur ./dnsmasq-2.80test4/bld/get-version ./dnsmasq-2.86/bld/get-version
|--- ./dnsmasq-2.80test4/bld/get-version 2022-07-03 17:32:08.541879257 +0200
|+++ ./dnsmasq-2.86/bld/get-version 2021-09-08 22:21:22.000000000 +0200
--------------------------
解决方法
当将工作目录更改为上一级并将较新的 /dnsmasq-2.86 源目录重命名为其他名称(或只是将其删除)时,补丁似乎已正确应用到旧的 /dnsmasq-2.80test4 目录,使用:
~$ patch --dry-run --verbose -p0 -i dnsmasq-2.86.diff
问题
如何修改diff
和/或patch
命令,允许我patch
从需要更改的目录 ( cd ./parent/dnsmasq-2.80test4
) 作为工作目录,而不是从cd ./parent
dir 工作?