如何使用 VisualStudio 代码作为 GitMergeTool 的默认编辑器,包括3路合并

今天我试着在命令提示符上使用 git mergetool,发现它默认使用 维姆,这很酷,但我更喜欢使用 VS 代码

如何让 VisualStudio 代码作为 Git 的 GUI 来处理合并冲突(甚至作为一个不同的工具) ?

是否可以设置 VS 代码来获得 三人合并的视觉效果?

91531 次浏览

更新: Visual Studio Code 1.70以来,增加了 三人合并和改进。如果你感兴趣的话,视觉效果及进一步解释是可用的。

Visual Studio Code 1.13开始,更好的合并被整合到 VisualStudio 代码的核心。

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

  1. 要对命令行条目执行此操作,请输入以下各项: < em > (注意: 如果在命令提示符上,请将 '替换为 "。感谢 Iztok Delfin 和 e4rache 帮助澄清了这一点。)

    1. git config --global merge.tool vscode
    2. git config --global mergetool.vscode.cmd 'code --wait --merge $REMOTE $LOCAL $BASE $MERGED'
    3. git config --global diff.tool vscode
    4. git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'
  2. 为此,在 .gitconfig 使用 VisualStudio 代码中粘贴一些行。

    • 从命令行运行 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"]
      # Comment: Original way before three-way merge shown commented out
      #    cmd = code --wait $MERGED
      # Comment: For "Three-way merge"
      cmd = code --wait --merge $REMOTE $LOCAL $BASE $MERGED
      [diff]
      tool = vscode
      [difftool "vscode"]
      cmd = code --wait --diff $LOCAL $REMOTE
      # Comment: End of "Extra Block"
      

现在,从 Git 目录中带冲突运行 git mergetool,并且,tada,您有 VisualStudio 代码帮助您处理合并冲突!(只要在关闭 VisualStudio 代码之前确保使用 保存你的文件即可。)

Accept Incoming Change anyone?

要进一步阅读从命令行启动 code的内容,请查看 这份文件

想了解更多关于 git mergetool的信息,请查看 这份文件

我不得不把双引号换成简单引号:

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

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

如果你在视窗中使用的是 Git Bash而非命令提示符,这是必需的。

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

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"

类似的问题 给你

如果有人想在 Visual Studio 中解决这个问题,另一个选择是通过 Visual Studio: Team Explorer-> 点击 Home icon = > Settings 按钮 = > 展开 Git section = > 点击 Global Settings

enter image description here enter image description here enter image description here

非常好的现有答案之上,通过将 -n添加到命令行,您应该在新窗口中打开 VS Code。

你的 git config --global --edit是这样的。

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