用vimdiff查看所有`git diffs`

chu*_*ckg 199 git vim diff vimdiff

我设置git diff包装到vimdiff,使用" Git Diff with Vimdiff "作为指南,除非有许多文件有变化,否则它按预期工作.

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

external diff died, stopping at filename
Run Code Online (Sandbox Code Playgroud)

这是一种与我以前完​​全不同的行为.我在过去使用SVN时有类似的设置,在对多个:wq文件进行区分时,我会查看第一个文件,然后编写并退出使用,下一个文件会有差异打开.

Git不是这种情况.我试过了:n[ext],但这样做并没有用原始文件填充左侧窗口,因此可以针对修改后的版本进行区分.

chu*_*ckg 320

git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool
Run Code Online (Sandbox Code Playgroud)

键入会git d产生预期的行为,:wq在vim循环中键入变更集中的下一个文件.

  • 只是我的两分钱:我有'df`别名为`diff`和`dt'别名为`difftool`.此外,在Vim中键入`:qa`将循环到下一个变更集而不保存任何内容. (19认同)
  • @Asenar _"这个解决方案很棒,除了保存更改时你必须键入`:w!`而不是`:w`".这是因为git用`-R`选项调用`vimdiff`.您可以使用`git config --global difftool.vimdiff.cmd'vimdiff"$ LOCAL""$ REMOTE"'`覆盖它.这将在可写模式下打开vimdiff. (4认同)
  • 这个解决方案很棒,除了保存更改时你必须输入":w!" 而不是:w (2认同)
  • @jonyamo设置别名应始终基于我们使用某些命令的频率.我经常使用`git diff`而不是`git difftool`.所以我把'd`别名'diff'和''dt'变成'difftool'.可用性比创建带模式的别名更重要. (2认同)
  • 将其中一些已投票的评论移至答案中。谢谢。 (2认同)

小智 101

你可以尝试git difftool,它的目的是做这个东西.

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

git config diff.tool vimdiff
Run Code Online (Sandbox Code Playgroud)

然后,当你想要差异时,只需使用git difftool而不是git diff.它会像你期望的那样工作.


Nan*_*mar 21

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
Run Code Online (Sandbox Code Playgroud)

  • 你回答mergetool,而不是difftool.但它仍然是一个有用的答案.+1. (3认同)

Vic*_*tor 15

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

git config --global diff.tool vimdiff
Run Code Online (Sandbox Code Playgroud)

然后你可以使用git difftooldiff 。

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

git difftool --tool=vimdiff
Run Code Online (Sandbox Code Playgroud)


小智 5

对于想要使用未在 git 中列出的其他差异工具的人,请使用nvim. 这是我最终使用的:

git config --global alias.d difftool -x <tool name>
Run Code Online (Sandbox Code Playgroud)

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

git d <file>
Run Code Online (Sandbox Code Playgroud)

  • 现在支持“nvimdiff”作为工具,因此您可以执行“git config --global diff.tool nvimdiff”。 (3认同)