如何干净地编辑差异/补丁文件?有没有补丁文件编辑器?

时间:2011-09-20 13:13:02

标签: vim editor diff patch

场景:我有一个可以干净地应用于我的工作文件的补丁文件,但我不想要补丁中的所有更改。

通常,我执行vim example.patch,删除不需要的更改并应用patch -p0 -i example.patch但有时修补程序不适用,我必须重新开始。

是否有补丁文件编辑器,允许用户编辑和删除补丁的一部分,仍然可以干净地应用?

4 个答案:

答案 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