Directory 当diff来自两个不同的目录结构时,如何应用补丁程序

Directory 当diff来自两个不同的目录结构时,如何应用补丁程序,directory,diff,patch,Directory,Diff,Patch,这件事我一整天都在忙,解决不了 我正在尝试用生成的diff文件修补一个文件,其中diff文件是从两个不同的位置生成的。目标文件位置也不同 地点是 source: /home/paul/M/C/D/Android.mk reference: /home/paul/A/B/C/D/Android.mk destination: /home/paul/X/Y/Z/C/D/Android.mk 我想得到源和引用之间的差异,并将它们作为补丁应用到目标。补丁的生成过程如下 cd /home/paul/M

这件事我一整天都在忙,解决不了

我正在尝试用生成的diff文件修补一个文件,其中diff文件是从两个不同的位置生成的。目标文件位置也不同

地点是

source: /home/paul/M/C/D/Android.mk
reference: /home/paul/A/B/C/D/Android.mk
destination: /home/paul/X/Y/Z/C/D/Android.mk
我想得到源和引用之间的差异,并将它们作为补丁应用到目标。补丁的生成过程如下

cd /home/paul/M
diff -u C/D/Android.mk  /home/A/B/C/D/Android.mk >> C/patch.diff
修补程序文件包含

--- C/D/Android.mk        2016-01-13 12:37:18.896126389 +0100
+++ /home/paul/A/B/C/D/Android.mk   2015-09-24 12:13:38.749361238 +0200
<differences>
——C/D/Android.mk 2016-01-13 12:37:18.896126389+0100
+++/home/paul/A/B/C/D/Android.mk 2015-09-2412:13:38.749361238+0200
我将补丁文件复制到第三个位置并应用补丁

cp C/patch.diff ~/X/Y/Z/C/.
cd ~/X/Y/Z
patch -p1 --dry-run -d C < C/auro_patch.diff

can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|*** C/D/Android.mk       2016-01-13 12:37:18.896126389 +0100
|--- /home/paul/A/B/C/D/Android.mk        2015-09-24 12:13:38.749361238 +0200
cp C/patch.diff~/X/Y/Z/C/。
cd~/X/Y/Z
补丁-p1——干运行-d C
我认为问题在于修补程序正在查找源文件/home/paul/A/B/C/D/Android.mk。错误消息也很奇怪,因为它引用了第3行,该行没有文件位置信息。更奇怪的是,为什么补丁甚至需要原始文件的位置?我认为它应该简单地用补丁细节修改目标文件,不是吗

我一直在使用-p选项,但我的印象是,补丁希望源和目标具有相同的目录深度。 所有三个项目位置的项目层次结构C/D相同。但是,在每种情况下,父根目录都是不同的

有人能帮忙吗?不幸的是,我不能使用“git apply”,这会容易得多

谢谢,
Paul

我通过指定源文件、目标文件和修补程序文件的完整路径来解决它

我通过指定源文件、目标文件和修补程序文件的完整路径来解决它

-p2-d C/d
-它工作吗?-p2选项不工作,已经试过了吗?您两次都试过了吗?
-p2-d C/d
-是否有效?p2选项不起作用,已经试过了吗?您两次都试过了吗?