【问题标题】:Viewing all `git diffs` with vimdiff使用 vimdiff 查看所有 `git diffs`
【发布时间】:2011-04-12 10:36:49
【问题描述】:

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

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

external diff died, stopping at filename

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

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

【问题讨论】:

    标签: git vim diff vimdiff


    【解决方案1】:

    你可以试试git difftool,它就是专门用来做这个的。

    首先,你需要配置 diff 工具到 vimdiff

    git config diff.tool vimdiff
    

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

    【讨论】:

    • 快到了!稍微修改了一下,正是我要找的。虽然 +1!
    • vimdiff 合并工具最近更新了:git.kernel.org/?p=git/…(以及其他一些提交,但这是最大的一个)。不确定下一个维护版本何时发布,但如果你愿意从 git.git 构建,升级将是你的!
    【解决方案2】:
    git config --global diff.tool vimdiff
    git config --global difftool.prompt false
    

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

    导航命令,

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

    别名(示例)

    git config --global alias.d difftool
    

    .. 将让您输入 git d 来调用 vimdiff。

    高级用例,

    • 默认情况下,git 使用 -R 选项调用 vimdiff。你可以用 git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"' 覆盖它。这将以可写模式打开 vimdiff,允许在比较时进行编辑。
    • :wq 在 vi​​m 中循环到变更集中的下一个文件并保存更改。

    【讨论】:

    • 只是我的两分钱:我有df 别名为diffdt 别名为difftool。此外,在 Vim 中输入 :qa 将循环到下一个变更集而不保存任何内容。
    • 这个解决方案很棒,除了在保存更改时您必须输入“:w!”而不是 :w
    • @jonyamo 设置别名应该始终基于我们使用某些命令的频率。我经常使用git diff 而不是git difftool。所以我将d 别名为'diff' 和'dt' to difftool'。可用性比使用模式创建别名更重要。
    • @Asenar "这个解决方案很棒,只是在保存更改时您必须输入 :w! 而不是 :w"。 这是因为 git 调用 vimdiff -R 选项。您可以使用git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"' 覆盖它。这将以可写模式打开 vimdiff。
    • 将其中一些被支持的 cmets 移到了答案中。谢谢。
    【解决方案3】:
    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
    

    【讨论】:

    • 您回答的是合并工具,而不是差异工具。但这仍然是一个有用的答案。 +1。
    • @dotancohen 真的谢谢我从来没有注意到愚蠢的错误现在我可以编辑我的答案。
    • @NanheKumar, @dotancohen,将上述答案中的merge 替换为diff 即可, git config --global diff.tool vimdiff
    【解决方案4】:

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

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

    在我的例子中,我将 &lt;tool name&gt; 设置为 nvim -d 并调用 diff 命令

    git d <file>
    

    【讨论】:

    • nvimdiff 现在支持作为工具,因此您可以使用git config --global diff.tool nvimdiff
    【解决方案5】:

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

    git config --global diff.tool vimdiff
    

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

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

    git difftool --tool=vimdiff
    

    【讨论】:

    • 我确实在寻找临时解决方案。谢谢你最后的补充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2015-10-15
    • 2023-03-26
    • 2015-07-06
    相关资源
    最近更新 更多