如何在 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
使用git-gui 手动选择要暂存的行/块,如here 和here 所述(请参阅下面的工具截图)选择一个差异算法。变种如下:
default、myers 基本的贪心 diff 算法。目前,这是 默认。
minimal花费额外的时间来确保最小的差异是 生产出来的。
patience 生成补丁时使用“patience diff”算法。
直方图 该算法将耐心算法扩展为“支持 低出现的共同元素”。
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 交互式补丁模式中获得更好的帅哥?的主要内容,如果未能解决你的问题,请参考以下文章