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


Answers:


239

Visual Studio Code 1.13开始, 更好的合并已集成到Visual Studio Code的核心中。

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

  1. 要使用命令行条目执行此操作,请输入以下各项:(注意:如Iztok Delfin和e4rache所述"'在Windows Git Bash,macOS和Linux上替换为)

    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 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 Code帮助您处理合并冲突!(只需确保在关闭Visual Studio代码之前先保存文件即可。)

接受任何人的来钱更改吗?

有关code从命令行启动的更多信息,请参阅本文档

有关更多信息,git mergetool请查阅此文档


3
在<<<<头上方有一行插入,其中列出了以下选项:“接受当前更改|接受传入更改|接受两个更改|比较更改”,我相信它将在文件中检测到的更改的每个部分上插入。但是在某个部分中,如果您想自定义合并一点点和手工一点,我相信您会在本地进行更改,然后使用“接受当前更改”选项。因此,工作流程确实需要您退后一步以向前迈进。如果其他人以其他方式解决了此问题,请在此处发布以教育我们
埃里克·D·约翰逊

3
我收到错误信息unknown tool: vscode…我非常确定您必须使用命令行来code代替VsCode,而不是vscode
Kolob Canyon

19
另外,这对我不起作用。它只是弹出打开的VsCode,并且从未弹出任何文件
Kolob Canyon

1
我想做的是“ giff difftool mybranch master”,并打开VS代码,其中包含所有已更改文件的差异。现在,它只会打开一个,并等待您将其关闭。
Pluc

1
哦,是的,我知道这一点,但是它没有我想要的灵活性,就像在两个提交或两个分支之间获取差异。如果可以的话,在我看来,在vs代码中浏览git非常可怕。我只是喜欢他们的差异和合并用户界面。我要去git difftool -d的目录差异。明天我会检查工作原理。
Pluc

23

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

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

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

如果您使用的是Windows的Git Bash而不是Windows Command Prompt,则需要这样做。


1
不适合我。我只是使用命令提示符在Windows上执行此操作。也许您使用的是不同的东西?如果是这样,我建议添加您正在使用的环境,以便其他具有相同环境的人将知道他们需要进行此更改。
Todesengel

1
@ e4rache和@ Iztok-Delfin您在此处列出的内容很有帮助,但实际上是在评论时,您无意中将其作为答案。我确定您会遇到麻烦,因为您在SO上没有50分让您发表评论,这是一种站点工作流程问题,应予以考虑。无论如何,感谢您的贡献,我在上面的回答中添加了您的建议。感谢您的帮助那些谁晚一点,并使用Git的Bash:^)
埃里克·约翰逊D.

@ eric-d-johnson我完全想发表评论而不是回复。(对不起,我是这个网站的新手),顺便说一句,我在Linux上使用bash。有没有办法将此回复转换为评论?
e4rache

@ e4rache我不知道如何发表评论,但是主持人也许会看到这一点并给我们一些提示(提示,提示)。如果您获得了50分,则可以对已接受的答案进行评论,然后删除此答案,因此一旦您成为拥有许多分的SO摇滚明星,您就可以回到这里并做任何让您满意的整理工作,然后带回去很好地回忆起一切。
埃里克·D·约翰逊

1
@mohamedghonemi好的反馈。我现在更新了macOS和Linux顶部的解释,以记住使用单引号(')。
埃里克·D·约翰逊

2

如果有人要在Visual Studio中解决该问题,则可以通过Visual Studio进行其他选择:Team Explorer->单击“主页”图标=>“设置”按钮=>展开Git部分=>单击“全局设置”

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明


Visual Studio不等同于Visual Studio Code。这样的设置方式完全不同。有关差异,请参见stackoverflow.com/a/33798601
jwd630

1
@ jwd630我知道VS代码不同于VS。我在VS中遇到了这个问题,但是找不到解决方案,所以我最好将它发布,以防有​​人遇到这个问题。无需投票。
Daniel B

2

现有出色答案之上,您应该在新窗口中打开VS Code,方法是添加-n到命令行在。

所以你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                                                    

1

使用该手册,您可以找到一个有趣的参数:

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" 

类似的问题在这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.