如何用单条patch命令基于file1和diff文件生成file3?
用单条patch命令实现需求
当然有单条patch命令的实现方式啦,刚好可以利用patch的参数组合直接完成从file1生成file3的操作,不用先复制文件再打补丁。假设你的diff文件名为diff.txt,可以直接运行这条命令:
patch --input=diff.txt --output=file3 --strip=1 --directory=. file1
如果喜欢用短参数的话,等价的命令是:
patch -i diff.txt -o file3 -p1 . file1
参数拆解说明:
-i/--input:指定要使用的diff文件路径,这里就是你用git diff --no-index生成的那个diff文件-o/--output:告诉patch把修补后的内容输出到file3,而不是直接修改原始的file1-p/--strip=1:关键参数!它会剥离diff文件中路径的第一个组件(也就是去掉a/和b/前缀),这样patch就能正确识别到要基于file1进行修改,而不是去找不存在的a/file1路径--directory=.:指定当前目录为工作目录,确保patch能找到你提供的file1- 最后的
file1:指定作为修补基础的原始文件
原理补充:
你用git diff --no-index file1 file2生成的diff,开头会是类似这样的格式:
--- a/file1 +++ b/file2
通过-p1剥离掉a/和b/后,patch会把目标文件识别为file2,但我们用-o file3强制把结果输出到file3,同时基于file1进行修补,完美绕开了路径不匹配的问题,一次性完成需求。
如果怕生成不必要的备份文件,可以额外加上--no-backup-if-mismatch参数,确保不会生成.orig后缀的备份。
内容的提问来源于stack exchange,提问作者Gabriel Petrovay
相关产品推荐
相关产品推荐

