233

我设置git diff包装到 vimdiff,使用“ Git Diff with Vimdiff ”作为指导,它按预期工作,除非有很多文件有更改。

当有多个文件有更改并且我运行git diff时,它会打开第一个文件,并且在退出 vimdiff 的第一个实例后,我会看到以下消息:

external diff died, stopping at filename

这是与我习惯的完全不同的行为。过去我使用 SVN 进行了类似的设置,当比较多个文件时,我会查看第一个文件,然后写入并退出使用:wq,下一个有差异的文件会打开。

这不是 Git 的情况。我试过:n[ext]了,但这样做不会用原始文件填充左侧窗口,以便可以将其与修改后的版本进行比较。

4

5 回答 5

370
git config --global diff.tool vimdiff
git config --global difftool.prompt false

键入git difftool会产生预期的行为。

导航命令,

  • :qa在 vim 中循环到变更集中的下一个文件而不保存任何内容。

别名(示例)

git config --global alias.d difftool

.. 将让您键入git d调用 vimdiff。

高级用例,

  • 默认情况下,git 使用 -R 选项调用 vimdiff。你可以用 git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"' 覆盖它。这将以可写模式打开 vimdiff,允许在差异时进行编辑。
  • :wq在 vim 中循环到更改集中的下一个文件并保存更改。
于 2010-09-15T00:27:18.953 回答
108

你可以试试git difftool,它就是为做这件事而设计的。

首先,您需要将 diff 工具配置为 vimdiff

git config diff.tool vimdiff

然后,当您想要区分时,只需使用git difftool而不是git diff. 它将按您的预期工作。

于 2010-09-15T00:08:00.670 回答
22
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff
git config --global diff.tool kdiff3
git config --global diff.tool meld
git config --global diff.tool xxdiff
git config --global diff.tool emerge
git config --global diff.tool gvimdiff
git config --global diff.tool ecmerge
于 2013-07-09T06:05:18.027 回答
5

对于想要使用 git 中未列出的另一个 diff 工具的人,请使用nvim. 这是我最终使用的:

git config --global alias.d difftool -x <tool name>

就我而言,我设置<tool name>nvim -d调用 diff 命令

git d <file>
于 2020-04-19T04:11:54.377 回答
3

如果要永久使用vimdifffor git diff,可以设置~/.gitconfig文件:

git config --global diff.tool vimdiff

然后你可以git difftool用来区分。

如果只想临时使​​用vimdiff,可以每次运行命令:

git difftool --tool=vimdiff
于 2021-05-13T11:24:59.997 回答