ChatGPT解决这个技术问题 Extra ChatGPT

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

今天我尝试在 Windows 命令提示符下使用 git mergetool,发现它默认使用 Vim,这很酷,但我更喜欢 VS Code .

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


J
Jeremy Moritz

Visual Studio Code 1.13 起,Better Merge 已集成到 Visual Studio Code 的核心中。

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

要使用命令行条目执行此操作,请输入以下各项:(注意:如果您不使用 Iztok Delfin 和 e4rache 阐明的 Windows Git Bash、macOS 或 Linux,则可能需要将 ' 替换为 ") git config --global merge .tool vscode git config --global mergetool.vscode.cmd 'code --wait $MERGED' git config --global diff.tool vscode git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE' 为此,请使用 Visual Studio Code 在 .gitconfig 中粘贴一些行。从命令行运行 git config --global core.editor "code --wait"。从这里您可以输入命令 git config -- global -e. 你需要在下面的“Extra Block”中粘贴代码。[user] name = EricDJohnson email = cool-email@neat.org [gui] recentrepo = E:/src/gitlab/App-Custom /Some-App # Comment: 你刚刚通过 'git config --global core.editor "code --wait"' 添加了这个 [core] editor = code --wait # Comment: Start of "Extra Block" # Comment: This是解锁 Visual Studio Code 作为你的 Git diff d Git 合并工具 [merge] tool = vscode [mergetool "vscode"] cmd = code --wait $MERGED [diff] tool = vscode [difftool "vscode"] cmd = code --wait --diff $LOCAL $REMOTE #评论:“额外块”结束

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

https://i.stack.imgur.com/SjhvD.png

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

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


Better Merge 的这种集成是否允许您接受并选择要合并的部分?或者您是否仍然需要手动删除冲突的额外注释,例如 <<<< HEAD>>>> develop
<<<< Head 上方有一行,插入其中列出了选项:“接受当前更改|接受传入更改|接受两个更改|比较更改”,我相信它会在文件中检测到的更改的每个部分插入它.但是在一个部分中,如果您想手动自定义合并其中的一些内容,我相信您会在本地进行更改,然后使用“接受当前更改”选项。所以工作流程确实让你后退一步,以便向前迈出一步。如果其他人以不同的方式解决此问题,请在此处发布以教育我们
哦,我现在在你的打印屏幕上看到了,非常整洁。非常感谢您的解释以及如何做到这一点。下次有冲突时会很乐意使用它:)
我收到错误 unknown tool: vscode...我很确定从命令行调用 VsCode 你必须使用 code 而不是 vscode
另外,这对我不起作用。它只是弹出打开 VsCode 并且没有文件被提出
P
Peter Mortensen

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

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

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

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


不适合我。我只是在 Windows 上使用命令提示符执行此操作。也许你正在使用不同的东西?如果是这样,我建议添加您正在使用的环境,以便具有相同环境的其他人知道他们需要进行此更改。
@e4rache 和 @Iztok-Delfin 您在此处列出的内容是有用的内容,但您不小心将其作为答案,而实际上它是评论。我敢肯定您遇到了麻烦,因为您在 SO 上没有 50 分允许您发表评论,这是一种可能应该调查的站点工作流程问题。无论如何,感谢您的贡献,我在上面的答案中添加了您的提示。感谢您帮助后来使用 Git Bash 的人:^)
@eric-d-johnson 我完全是想发表评论而不是回复。 (对不起,我是这个网站的新手)顺便说一句,我在 linux 上使用 bash。有没有办法将此回复转换为评论?
@e4rache 我不知道如何让它成为评论,但也许版主会看到这个并给我们一些提示(提示,提示)。如果你有 50 分,你可以对接受的答案发表评论,然后删除这个,所以一旦你成为一个拥有大量积分的摇滚明星,你就可以回到这里,做任何让你开心并带回来的家务事美好的回忆是如何开始的。
@mohamedghonemi 很好的反馈。我现在更新了 macOS 和 Linux 顶部的说明,以记住使用单引号 ('s)。
C
Captain Man

excellent existing answer 之上,您应该通过将 -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                                                    

我使用了这些设置,但是当我执行 git diff commit_id1 commit_id2 时,它不会打开 VS 代码编辑器窗口。它仍然默认为终端。我使用了错误的命令吗?
@user5965026 您是否尝试过 git diftool 而不是 git diff
G
Gomino

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

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


D
Daniel B

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

https://i.stack.imgur.com/8ZdKI.png


Visual Studio 不等同于 Visual Studio Code。像这样的设置方式是完全不同的。有关差异,请参见 stackoverflow.com/a/33798601
@jwd630 我知道 VS 代码与 VS 不同。我在 VS 中遇到了这个问题,但找不到解决方案,所以我认为最好发布它以防有人遇到这个问题。无需投票。
这是对不同产品的完全不同问题的回答。
完全正确使用:windows medial player 与 vs code 完全不同。