来自外部.diff文件的交互式补丁

3

是否有一个Linux命令或程序可以交互地打补丁到源代码中,将每个块都打印在屏幕上,并在应用到文件之前等待确认?

类似于git add -p,但是从另一个.diff文件中获取更改?


Gitзҡ„add -pжҳҜдёҖдёӘеӨ§еһӢPerlи„ҡжң¬($(git --exec-path)/git-add--interactive)зҡ„дёҖйғЁеҲҶпјҢеӣ жӯӨеҫҲе®№жҳ“пјҲе—Ҝ...пјүдҝ®ж”№е®ғд»ҘиҜ»еҸ–е…¶д»–е·®ејӮгҖӮ - torek
你有没有找到解决方案或者写脚本? - young_souvlaki
@young_souvlaki 抱歉,我没有时间去研究torek的提示方向。也许周末我会试一下。 - Student4K
2个回答

1
你可以在shell/ruby/python中编写脚本,逐行读取文件并提示添加文件签名之间的差异。脚本可以接受差异文件的名称作为参数,或者您可以放置两个哈希并在脚本内部制作补丁。
此外,您可以将该脚本称为git-command-name,并将其放入您的user/bin文件夹中,git会将command-name识别为git命令。
另一方面(仅是一个想法),您能否操纵.diff文件的创建?也许您可以使用format-patch,并在应用程序停止后的每个提交diff上停止。

0

虽然不是互动的,但另一个选择是手动编辑 .diff 文件并删除您不想要的任何更改。

如果您在emacs中打开一个diff文件并将编辑器设置为diff-mode,您可以编辑补丁,并且emacs将尝试更新块标记。(Emacs会自动以diff-mode打开.diff文件。)

在进行更改后手动更新标记,请执行C-c C-w重新生成块

逐个应用块,请执行C-c C-a。要反向应用,请执行C-u C-c C-a。您还可以使用M-x diff-tell-file-name将它们应用到其他文件。

我发现patch original patch.diffpatch < patch.diff更可靠,并且使用diff -u创建的补丁文件更容易处理。

此处也有相关信息文档记录。

更新 [5.21.21]:
C-c C-s 可以将 hunks 分割,对于手动编辑非常有用。有时候 C-c C-w (diff-ignore-whitespace-hunk) 并不会按照你的意图执行,所以最保险的方法是分割 hunks 并让 Emacs 自动更新头部。当保留行不变时,这一点尤其有用;只需将其分割为一个 hunk,并删除以移除更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接