【问题标题】:Use Git's patience diff algorithm for interactive add使用 Git 的耐心差异算法进行交互式添加
【发布时间】:2012-09-07 16:15:14
【问题描述】:

我想用git add -p 使用Git 的耐心差异算法(如果你用--patience 参数调用git diff 得到的算法)。我该怎么做?

背景:我正在处理一些 XML 文件和git diff 的正常算法produces pretty poor diffs due to "misaligned" entry/exit tags。如果我运行git diff --patience,我会得到更多有用的差异,但没有明显的方法可以在git add -p 中使用这些差异。

【问题讨论】:

  • 我不确定你现在能不能做到这一点,但这听起来像是对git 开发人员的一个有价值的建议......事实上,可能还有其他git diff 选项暴露在git add 和其他默认的git diff 完成的地方会很有用...

标签: git git-diff git-add git-patch


【解决方案1】:

git add -p 当前拒绝差异标志,但您可以使用 diff.algorithm 配置选项:

git config --global diff.algorithm patience

Git 1.8.2 中的新功能。

【讨论】:

  • 甜蜜!现在我只需要等待 Cygwin Git 赶上来……
  • 是否也应该更改 git commit 的算法?
【解决方案2】:

这对我有用:

git -c diff.algorithm=patience add -p [...]

我正在 Cygwin 中运行最新的 git v2.1.0。

【讨论】:

  • 是的,正如@Tobu 在接受的答案中已经指出的那样,该配置标志已添加到 Git v1.8.2 中。事实证明,在 Cygwin 上构建最新的 Git 的方法是接管维护工作,这正是我最终要做的 :)
  • @me_and:那么我要感谢你终于获得了 Cygwin git 的更新版本 :) 它已经有一段时间没有活动了。至于我的回答,我只是想表明它是可以改变的内联配置,无需修改全局配置。
  • @me_这里有趣的是这个配置选项只是临时的,可以通过这种方式作为cli-flag传递
【解决方案3】:

嗯...您可以做的一件事是将git diff 的输出通过管道传输到一个临时位置,然后使用git apply 将其读回:

git diff --patience <commitA> <commitB> > /tmp/patch.out
# checkout a new branch or otherwise do what you need to prep
git apply < /tmp/patch.out

这会将 diff 的输出应用到工作目录,但不会提交或暂存更改。然后,您可以像往常一样运行 git add -p--patience 差异将是您以交互方式添加的更改。

如果diff 更适合您的工作流程,您没有理由不能将diff 直接传送到apply。这是我在重建自己的本地分支机构以进行生产集成时经常做的事情。

看起来您也可以将其用作merge strategy,,因此您可能无需以交互方式添加差异,而是只需创建一个包含所需内容的分支,然后将其合并。

【讨论】:

  • 这就是我目前正在做的;它让我可以编辑补丁,这基本上是我想用git add -p 做的事情。可悲的是,这似乎比应有的更乏味。
  • @me_and 添加了一些关于将其用作合并策略的注释。或许您可以生成一个只包含您想要的更改的垃圾合并分支,然后使用合并策略获得更好的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 2019-01-27
  • 2018-04-19
  • 2013-04-10
相关资源
最近更新 更多