我已将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
如何解决这个问题?
答案 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不会要求确认冲突解决方案的原因,因为它会看到更新的时间戳并假定文件已解决。