4

我已配置vimdiff为 git 的合并工具。每当我进行合并时,git 从不询问合并是否成功。我也试过:

git config --global mergetool.vimdiff.trustExitCode false

没有区别。在我离开 vimdiff 之后仍然没有问题,:wqa我必须手动删除过时的*.orig文件。

也许相关:当我显示配置设置时trustExitCode不再显示驼峰式:

git config --global -l

core.editor=vim
core.autocrlf=input
merge.tool=vimdiff
alias.co=checkout
alias.st=status
color.diff=auto
color.status=auto
color.branch=auto
mergetool.vimdiff.trustexitcode=false

如何解决这个问题?

4

3 回答 3

4

我知道这是一个老问题,但我遇到了同样的问题。

关于手动删除陈旧备份文件的部分可以通过以下方式修复:

git config --global mergetool.vimdiff.keepBackup false

我认为另一个问题是它trustExitCode没有做你认为它做的事情:

mergetool.<tool>.trustExitCode

对于自定义合并命令,指定合并命令的退出码是否可以用来判断合并是否成功。如果未设置为 true,则检查合并目标文件时间戳,如果文件已更新,则假定合并成功,否则提示用户指示合并成功。

因此,即使将此选项设置为 false,它也只会在文件未更改时提示您。

于 2013-03-14T23:41:44.950 回答
3

我知道这并不是您问题的真正答案,但我认为您应该检查一个名为Fugitive的 vim 插件。

甚至还有一个关于使用 vimdiff 解决合并冲突的截屏视频

它基本上提供了您在终端中找到的所有(或大部分)git 功能,但在 vim 中以一种真正有意义的方式。希望有帮助,祝你好运:D。

于 2011-09-03T03:23:20.077 回答
2

使用trustExitCodeset (这似乎是 的默认值vimdiff),您将需要使用非零退出代码退出 vim,以便 git 将文件识别为未合并。

在 vim 中,这意味着使用:cq[uit]退出。请注意,它的:cq行为类似于:qall!,这意味着它会默默地丢弃所有未保存的更改并退出 vim(使用非零退出代码)。

这样做时(git v2.14.2.windows.1;git bash;vim 8.0.606)git 写道

merge of exampleFile.cpp failed
Continue merging other unresolved paths [y/n]?

它使文件处于冲突状态。如果我退出时:qall!冲突可能仍在文件中,但 git 会将其标记为已解决。

至于为什么git在使用时仍然接受它作为已解决trustExitCode = false,我有点不确定。当打开带有git mergetool时间戳的文件时,会更新为当前时间,这似乎表明 vimdiff(或 git)正在触摸该文件。这可能是 git 不会要求确认冲突解决的原因,因为它看到更新的时间戳并假定文件已解决。

于 2018-08-24T11:35:32.467 回答