【问题标题】:Interactive patch from external .diff file来自外部 .diff 文件的交互式补丁
【发布时间】:2016-12-05 08:59:31
【问题描述】:

是否有适用于 Linux 的命令或程序允许交互式地修补源代码,在屏幕上打印每个块并在将其应用到文件之前等待确认?

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

【问题讨论】:

  • Git 的 add -p 是大型 perl 脚本 ($(git --exec-path)/git-add--interactive) 的一部分,因此很容易(嗯...)对其进行修改以读取其他差异。
  • 你有没有找到解决方案或写过脚本?
  • @young_souvlaki 抱歉,没有时间按照 torek 的提示进行调查。可能会在周末尝试一下。

标签: linux git patch


【解决方案1】:

您始终可以在 shell/ruby/python 中编写脚本,逐行读取该文件并提示在文件签名之间添加差异。

它可以接受差异文件的名称作为参数,或者您可以在脚本中放置两个哈希并制作补丁。

更多这样你就可以调用那个脚本 git-command-name,把它放在你的 user/bin 文件夹中,git 就会把 command-name 识别为 git 命令。

另一方面(只是一个想法)你可以操纵 .diff 的创建吗?也许您可以使用格式补丁并在每次提交差异后应用停止?

【讨论】:

    【解决方案2】:

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

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

    要在更改后手动更新标记,请执行 C-c C-wregenerate the hunk

    要逐个申请大块头,请执行C-c C-a。要反向申请,请执行C-u C-c C-a。您也可以M-x diff-tell-file-name 将它们应用到不同的文件。

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

    Information also documented here.

    更新 [5.21.21]:
    C-c C-s 让您拆分大块,这对于手动编辑非常有用。有时C-c C-w (diff-ignore-whitespace-hunk) 并没有按照你的意图做,所以最安全的选择是拆分大块并让 emacs 自动更新标头。这在保持线条不变时特别有用;只需拆分成一个大块并删除即可删除更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多