场景:我有一个可以干净地应用于我的工作文件的补丁文件,但我不想要补丁中的所有更改。
通常,我执行vim example.patch
,删除不需要的更改并应用patch -p0 -i example.patch
但有时修补程序不适用,我必须重新开始。
是否有补丁文件编辑器,允许用户编辑和删除补丁的一部分,仍然可以干净地应用?
答案 0 :(得分:16)
如果您在emacs中打开diff文件并将编辑器置于“diff”模式,您实际上可以编辑补丁,它将以智能方式更新hunk标记。对我来说真的很好用!
答案 1 :(得分:9)
如果您正在寻找非交互式解决方案,rediff
的{{1}}会有所帮助。
这是patchutils
描述:
您可以使用
man
更正手动编辑的统一差异。拿一份 要编辑的差异,并在不更改任何偏移的情况下编辑它 或计数(以“@@”开头的行)。然后运行rediff,告诉它 原始diff文件的名称和您拥有的文件的名称 已编辑,它将输出已编辑的差异文件但已修正 抵消和计数。提供了一个小脚本
rediff
,用于编辑diff文件 在的地方。目前处理的更改类型包括:
- 修改任何文件内容行的文本(当然)。
- 添加新行插入或删除。
- 添加,更改或删除上下文行。通过调整偏移和/或计数来处理上下文范围内的线。
- 添加一个大块(@@ - 前缀部分)。
- 删除多个hunk(@@ - 前缀部分)。
根据其描述,editdiff
也可能是修复统一差异的潜在候选人。
答案 2 :(得分:2)
你使用什么SCM?如果使用 Git ,您可以:
在生成实际修补程序之前,请使用git add -p
仅添加部分更改。优良作法是仅使用相关更改生成较小的提交(但是有些组织不喜欢这样,只允许大量提交)。
如果您已经有补丁应用它,请使用git add -p
将要保留的代码部分添加到索引中。您可以提交并丢弃其余内容(git co .
)或隐藏它(git stash
)。
编辑(基于git add -p comment)
git add -p
允许你使用s选项将一个块分成更小的块,如果你需要更多的细节你需要使用e选项进行编辑,这将带你到你的gitconfig编辑器,它会有关于如何编辑大块的说明。答案 3 :(得分:1)
不要手动编辑补丁文件。在您的情况下,您可以尝试使用一些交互式工具来应用大块的补丁,例如ipatch