逐行应用补丁

10

由于我暂时被困在Subversion和shell工具中,git-gui等工具都不可用。是否有任何shell工具可以逐行交互式地应用补丁?


有Meld,它可以配置为与SVN一起使用。不过它是一个图形化工具,不确定是否符合要求。 - Piskvor left the building
3个回答

12

尝试在patch命令中添加--dry-run选项,这将让您确定问题所在,并适当编辑补丁或被补丁修改的文件。


1
sdiff 适用于合并两个文件。但是,当您需要交互式地应用补丁时,它并不能真正帮上忙。对于这种情况,只需使用 patch 命令,并加上 --dry-mode 选项来查找无效的块并进行编辑,这可能已经足够了。 - tonio
2
@l0b0:实际上应该是--dry-run - Hasturkun
7
sdiff file1 file2 -o outfile 可以对比文件file1和file2,并交互式地展示每个更改,让您选择要保存到outfile的更改。 sdiff 是最好的工具。 - pvinis
2
@pvinis:你的评论应该是一个答案,而且在我看来它应该被接受! - Matthew Leingang

4

ipatch 将 Darcs 中选择和编辑补丁的强大和便利性带给了那些没有使用 Darcs 版本控制系统的用户。

它允许用户交互式地将一个补丁文件拆分成多个补丁文件,并交互式地应用一个补丁,可能只应用部分内容。

作者有一篇介绍文章,可以在这里查看。


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允许您拆分块,这对于手动编辑非常有用。有时C-c C-wdiff-ignore-whitespace-hunk)无法达到您预期的效果,因此最安全的方法是拆分块并让emacs自动更新标题。当保留行不变时,这尤其有用;只需拆分成一个块并删除以删除更改即可。

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