如何让git与vimdiff和trustExitCode一起工作

时间:2011-05-30 09:03:25

标签: git mergetool

我已将vimdiff配置为git的mergetool。每当我进行合并时,git都不会问合并是否成功。我也尝试过:

git config --global mergetool.vimdiff.trustExitCode false

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

也许相关:当我显示配置设置trustExitCode不再与camelcase一起显示时:

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

如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

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

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

git config --global mergetool.vimdiff.keepBackup false

我认为其他问题是trustExitCode没有按照您的想法行事:

  

mergetool.<tool>.trustExitCode

     

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

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

答案 1 :(得分:3)

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

resolving merge conflicts with vimdiff

上甚至还有一个截屏视频

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

答案 2 :(得分:1)

设置了trustExitCode(这似乎是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会将其标记为已解决。

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