【问题标题】:What is the correct 'git-add' command to issue after running 'git-mergetool'?运行“git-mergetool”后发出的正确“git-add”命令是什么?
【发布时间】:2013-01-12 11:27:33
【问题描述】:

我不清楚完成导致冲突的合并所需的 Git 命令的正确顺序。我知道一种方法是使用类似

的方法来跟踪被拒绝的合并
git mergetool
# Then once everything has been fixed
git add ??
git commit -m "Some message"

但我不清楚 git-add 命令应该包含什么,以确保只有我最初为被拒绝的合并准备的文件最终被提交,并且只有那些文件被提交。

【问题讨论】:

  • mergetool 不是已经根据工具的返回状态这样做了吗?如果你git merge --continue 会发生什么?
  • @CarlNorum:我不能确定该工具是否正在返回(我可能并不总是知道使用了什么工具)。无论工具的返回状态是否有用,是否有一种方法可以奏效?
  • 对不起 - 不知道。它对我来说总是“刚刚工作”。希望很快有人会帮助您。
  • 如果合并工具返回非零值,git-mergetool 将不会暂存文件。我不清楚你到底想提交什么......在你进行合并后,自动合并的文件将被暂存,冲突的文件将阻止你提交,直到它们被解决。
  • 不,p4merge 至少没有设置正确的退出代码 - git 检查文件是否已更改。

标签: git git-merge git-add


【解决方案1】:

git-mergetool 通常会在冲突解决后自动暂存文件。您无需手动运行git-add

但是,为了使用各种工具,git-mergetool 将尝试通过检查修改日期来验证文件是否已更新(请参阅check_unchanged())。如果文件已经被修改,那么它会检查mergetool的返回码。

某些合并工具可能不会返回正确的退出代码(如果合并“成功”,则返回 0),因此 git 还提供了一个配置选项 mergetool.<tool>.trustExitCode 以防不可信。如果设置为false,那么 git 会一直询问你合并是否成功。

总结:

  1. 您的合并工具应在合并后将文件保存到磁盘,即使不需要进行任何更改(这应该是不可能的,因为这不会是合并冲突)。
  2. 如果您不信任合并工具的退出代码,可以将 trustExitCode 选项设置为 false。

在实践中,我建议使用 git 现在原生支持的合并实用程序之一。您可以获得这些here 的列表。如果您使用这些工具之一,除了配置 git 来使用它之外,您不需要任何其他设置,例如:

git config --global merge.tool p4merge

注意:您可能会在网络上找到很多关于设置这些工具的过时文章。例如,我最喜欢的合并工具p4merge 一开始并不被 git 原生支持,需要一些手动配置。对于最新版本的 git,这不再是必需的。

【讨论】:

  • 这看起来是对的:如果我使用 p4merge,那么合并后的文件会在退出后暂存,我只需要提交;无需添加。但是我有两个问题:(1)“git会一直问你是否合并成功”是什么意思?我有trustExitCode setfalse,但是在我退出p4merge 后不要被“询问”任何东西。 (2) 如果我将trustExitCode set 设置为true 会发生什么? (3)@Chronial 说(在对问题的评论中) p4merge 没有设置正确的退出代码。这是否意味着我应该(就像我一样)将trustExitCode set 设置为false
  • 还有一个注意事项:p4merge 似乎仍然需要一个路径规范,例如,git config --global mergetool.p4merge.path <path to p4merge shell executable>(例如,在 Mac 上:“/Applications/p4merge.app/Contents/MacOS/ p4merge")。
  • 是的,它要求它在您的路径中,或者明确设置路径。我通常在 Windows 上将 p4merge 添加到我的系统路径中。
  • 由于支持 p4merge,因此您无需担心这一点。 p4merge 包含的自定义配置将验证文件是否已更改,而不是取决于退出代码。因此,在这种情况下 trustExitCode 没有任何区别。请参阅p4merge 的来源。测试:尝试进行合并,然后将文件保存在 p4merge 中。它不会提示你。如果你不保存就关闭了,它会提示你。
猜你喜欢
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 2011-10-13
  • 2016-11-02
  • 2023-02-23
  • 1970-01-01
  • 2017-07-19
相关资源
最近更新 更多