如何仅修补diff中的特定块

时间:2010-01-02 03:18:14

标签: diff patch

有没有办法将diff中的单个Hunk应用到文件中?例如,假设我从文件A和B执行差异,并产生三个差异块,每个差异用...表示...

@@ -971,30 +977,28 @@

...(在统一差异的情况下)。然后我希望能够将差异输入stdin,并且要求补丁仅应用大块N.

手动方法是剪切和粘贴有趣的帅哥,但我不是那种解决方案。

3 个答案:

答案 0 :(得分:11)

filterdiff可能会有所帮助。

它允许从一个/多个补丁文件中提取符合各种要求的补丁子集。例如,这里我们从文件unified_diff.patch中提取适用于名称匹配为one_file.c的文件的修补程序,仅提取到原始文件的第950到1050行:

filterdiff -i *one_file.c --lines=950,1050 unified_diff.patch

提取具体/范围的帅哥:

filterdiff --hunks=1,3,5-8,15 file.patch

从邮件中提取补丁:

filterdiff message-with-diff-in-the-body > file.patch

答案 1 :(得分:0)

一些GUI差异/补丁工具可以选择块甚至单独的行。我知道来自TortoiseSVN的TortoiseDiff可以这样工作。我想我已经看过windiff做了,但是因为我不得不使用它已经有一段时间了。

就命令行工具而言,我还没有看到任何能够满足你要求的东西。

答案 2 :(得分:0)

Emacs不仅可以智能地编辑差异(包括曾经有用的split-hunk操作),而且可以自己一次应用一个hunk(避免从编辑器切换到运行patch)。