Git mergetool vimdiff diff3 视图改变仅显示“本地”文件

Git mergetool vimdiff diff3 视图改变仅显示“本地”文件

Git当使用和作为mergetool解决合并冲突时Vim,我(突然)得到了与我预期和习惯完全不同的视图。过去,我遵循这篇博文,结果是一个有四个窗口的视图:LOCAL | BASE | REMOTE然后是下面的文件。现在,我也得到了四个窗口,但是LOCAL然后LOCAL | LOCAL | file

我无法弄清楚问题是否出在GitVim我删除了全局变量.gitconfig以及,但都没有用。最后有用的是通过以下命令.vimrc隐藏HOME目录:Git

$ git merge octodog
$ HOME=  git mergetool

我认为此行为与其中一个或两个工具的新软件版本有关,因为我以前没有遇到过这种情况。此问题也与目录和主机无关,它也发生在不同的机器上。

版本:

$ git --version
git version 2.37.1
$ vim --version
VIM - Vi IMproved 9.0

最小工作示例(从博客文章中压缩而来):

$ cd $(mktemp -d)
$ git init
$ # ––– config mergetool
$ git config merge.tool vimdiff
$ git config merge.conflictstyle diff3
$ git config mergetool.prompt false
$ # ––– create merge conflict
$ echo -e 'cat\ndog\noctopus\noctocat' > animals.txt
$ git add animals.txt
$ git commit -am 'Initial commit'
$ git checkout -b octodog
$ sed -i 's/octopus/octodog/' animals.txt
$ git commit -am "Replace octopus with an octodog"
$ git checkout master
$ sed -i 's/octopus/octoman/' animals.txt
$ git commit -am "Replace octopus with an octoman"
$ # ––– trigger behavior
$ git merge octodog
$ git mergetool

我该怎么做才能再次获得正确的差异视图?

答案1

这是 git 2.37 的一个错误(参见此处:https://lore.kernel.org/git/YshkFWZfBMbuN%[电子邮件保护]/t/#r8aa35632787d0df77458137267135c7a6c0d683d)。重新实现了 vimdiff 的调用方式,参见更新日志:

 * "vimdiff[123]" mergetool drivers have been reimplemented with a
   more generic layout mechanism.

这个重新实现似乎没有考虑splitbelowsplitright选项。

解决方法是,您可以降级到 git 版本2.36(如 @romainl 的评论中所建议的),或者禁用splitbelowsplitright选项,直到修复发布。mergetool 驱动程序的作者似乎已经知道了这个问题(以及潜在的修复),因此希望它能很快得到解决。

答案2

就像@Ingo 的回答所说,这是 Git 2.37 中的一个错误;它在 Git 2.38 中已修复,因此升级到该版本也可以解决问题。

相关内容