如何使用 Visual Studio 代码作为 Git MergeTool 的默认编辑器

How to use Visual Studio Code as the default editor for Git MergeTool

今天我试图在 Windows 命令提示符下使用 git mergetool 并意识到它默认使用 Vim,这很酷,但我更喜欢 VS Code.

如何让 Visual Studio Code 作为我的 GUI 来处理 Git 的合并冲突(或者甚至作为差异工具)?

截至 Visual Studio Code 1.13 Better Merge 已集成到 Visual Studio 代码的核心。

将它们连接在一起的方法是修改您的.gitconfig,您有两个选择

  1. 要使用命令行条目执行此操作,请输入以下各项:(注意:您可能需要将 ' 替换为 ",如果您不使用 Windows Git Bash、macOS 或 Linux,如 Iztok Delfin 和 e4rache 所阐明)

    1. git config --global merge.tool vscode
    2. git config --global mergetool.vscode.cmd 'code --wait $MERGED'
    3. git config --global diff.tool vscode
    4. git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'
  2. 通过在 .gitconfig with Visual Studio Code.

    中粘贴一些行来做到这一点
    • 运行 git config --global core.editor "code --wait" 来自命令行。

    • 从这里您可以输入命令git config --global -e。您需要将代码粘贴到下面的“额外块”中。

        [user]
            name = EricDJohnson
            email = cool-email@neat.org
        [gui]
            recentrepo = E:/src/gitlab/App-Custom/Some-App
        # Comment: You just added this via 'git config --global core.editor "code --wait"'
        [core]
            editor = code --wait
        # Comment: Start of "Extra Block"
        # Comment: This is to unlock Visual Studio Code as your Git diff and Git merge tool
        [merge]
            tool = vscode
        [mergetool "vscode"]
            cmd = code --wait $MERGED
        [diff]
            tool = vscode
        [difftool "vscode"]
            cmd = code --wait --diff $LOCAL $REMOTE
        # Comment: End of "Extra Block"
      

现在,在您的 Git 目录中存在冲突 运行 git mergetool 而且,tada,您有 Visual Studio 代码帮助您处理合并冲突! (请确保在关闭 Visual Studio 代码之前 保存文件 。)

有关从命令行启动 code 的更多信息,请查看 this documentation

有关 git mergetool 中的更多信息,请查看 this documentation

我不得不用单引号替换双引号:

  git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'

使其正常工作(用双引号将 $LOCAL 和 $REMOTE 替换为它们的值)。

如果您使用 Git Bash 作为 Windows 而不是 Windows 命令提示符,则需要这样做。

使用手册你可以找到一个有趣的论点:

git difftool --help 
-x <command>, --extcmd=<command>
       Specify a custom command for viewing diffs.  git-difftool ignores the configured defaults and runs $command $LOCAL $REMOTE when this option is specified.
       Additionally, $BASE is set in the environment.

有了这些信息,您可以轻松地使用以下命令,而无需触及 git 配置:

git difftool -x "code --wait --diff" 

类似问题here

如果有人想在 Visual Studio 中解决它,另一种选择是通过 Visual Studio 解决:团队资源管理器 -> 单击主页图标 => 设置按钮 => 展开 Git 部分 => 单击全局设置

之上,您应该通过在命令行中添加 -n 在新的 window 中打开 VS Code。

所以你的 git config --global --edit 看起来像这样。

[merge]
        tool = vscode
[mergetool "vscode"]
        cmd = code -n --wait $MERGED
[diff]
        tool = vscode
[difftool "vscode"]
        cmd = code -n --wait --diff $LOCAL $REMOTE