如何在 git add 交互式补丁模式中获得更好的帅哥?

Posted

技术标签:

【中文标题】如何在 git add 交互式补丁模式中获得更好的帅哥?【英文标题】:How to get better hunks in git add interactive patch mode? 【发布时间】:2020-04-03 19:33:38 【问题描述】:

我经常使用git add -p somefile 以交互方式仅在给定文件中暂存部分内容。但是,如果文件有更复杂的更改,默认差异就会出错,交互式补丁命令提供的大块也会出错。

git diff 命令有许多选项可以改进或自定义差异输出,包括非常有用的--anchored=<text>,但有什么方法可以从git add -p 获得更好的信息?

【问题讨论】:

git add -p 实际上是一个 perl 脚本:git --exec-path 告诉你它在哪里;在此目录中查找git-add--interactive。您应该能够修改它以使用--anchored=<text> 调用git diff 使用emacs magit 你能不能展示一下这些困扰你的帅哥之一?比什么好?在什么文本中? @torek 它并不总是一个 perl 脚本:***.com/a/59382252/6309 【参考方案1】:

您可以尝试以下方法:

定义一个适合您的情况的custom hunk headerhere

尝试不同的diff algorithm,将其作为独立配置参数传递给git add -p,如here所述

git -c diff.algorithm=<algo-name> add -p

根据 git docs 的可用差异算法,

-diff-algorithm=耐心|minimal|histogram|myers

选择一个差异算法。变种如下:

defaultmyers 基本的贪心 diff 算法。目前,这是 默认。

minimal花费额外的时间来确保最小的差异是 生产出来的。

patience 生成补丁时使用“patience diff”算法。

直方图 该算法将耐心算法扩展为“支持 低出现的共同元素”。

使用git-gui 手动选择要暂存的行/块,如here 和here 所述(请参阅下面的工具截图

Modify the hunk's size 本身

设置这个diff.indentHeuristic参数

git -c diff.indentHeuristic=true add -p

来自 git docs,

diff.indentHeuristic 将此选项设置为 true 以启用实验性 改变差异大块边界以使补丁更容易的启发式 阅读。

但是,基于this

使用 Git 2.25(2020 年第一季度),您甚至不必再指定 --indent-heuristic(因为它现在已经有很长一段时间是默认设置了)。

,这个 参数默认设置为(为真)。所以可能,尝试将其设置为 false if 完全有帮助。

【讨论】:

以上是关于如何在 git add 交互式补丁模式中获得更好的帅哥?的主要内容,如果未能解决你的问题,请参考以下文章

Git 补丁 - 补丁不适用

是否有任何用于“git add -p”的 GUI 工具?

从 git add -p 编辑大块时修复“补丁不适用”

Git 打补丁流程

我应该使用啥来获得更好的性能、九个补丁或可绘制的 xml 资源?

从邮件列表应用 git 补丁