【问题标题】:How to use VS Code as merge and diff tool in SourceTree?如何在 SourceTree 中使用 VS Code 作为合并和差异工具?
【发布时间】:2018-04-23 13:17:48
【问题描述】:

This question 和其他一些人讨论了这如何在 Mac 上运行,但我找不到来自 Microsoft 或 Atlassian 的关于在 Windows 上执行此操作的文档全局 Git 设置。 (我只是更喜欢在可能的情况下在 IDE 中进行更改。)

SourceTree 的“选项”对话框“差异”选项卡中的“自定义”设置用于区分和合并 VS-Code 的参数是什么?

【问题讨论】:

  • 我无法在运行 VS Code V1.32.3 的 Win 10 机器上通过@HeyHeyJC 接受的答案来解决这个问题。我已将我的解决方案添加为答案
  • 据我所知,VS Code 不做合并,只有 2-way diffs。

标签: git visual-studio-code atlassian-sourcetree


【解决方案1】:

可能还有其他更好的变体,但经过一些实验后,我发现这些变体足够好......

  • 为“外部差异工具”和“合并工具”选择“自定义”
  • 两种情况下的“Diff 命令”都是安装 VS-Code 的路径,例如:

    C:\Program Files (x86)\Microsoft VS Code\Code.exe

  • Diff'ing 的命令行参数是:

    --diff --wait "$LOCAL" "$REMOTE"

  • 对于合并:

    -n --wait "$MERGED"

'-n' 标志使 VS-Code 打开一个新窗口,我更喜欢它,因为 VS-Code 打开速度如此之快,但你可以省略它。处理合并冲突时,您必须在完成后关闭文件才能继续。 SourceTree 似乎并没有始终如一地删除它创建的中间文件,但您可以轻松地从未暂存的文件部分中选择、右键单击和“删除”它们。

【讨论】:

  • VS Code 的默认路径现在是C:\Users\<username>\AppData\Local\Programs\Microsoft VS Code\Code.exe
  • 这是一个真正的 3-way diff 像 git require 还是只是一个简单的 2-way?也许这就是为什么中间文件仍然存在的原因..
  • @ObmerkKronen 抱歉,我使用 Sourcetree 的原因是因为我不知道像 '3-way diff like git require' 这样的东西是什么意思。如果有帮助,我只将它与 git repos 一起使用?
  • 知道了。无论如何,谢谢。例如,如果您愿意,可以阅读 herehere 的相关信息。三路合并是 git 使用(或应该使用)的。你的答案只有 2 个参数,所以我假设它是 2-way (第三个是你所说的 sourcetree 不知道处理的剩余文件。也许添加 anoteer 参数就可以了。
  • 感谢您的回答,它对我来说很好用,如果我可以在 vs-code 中设置快捷方式以在冲突之间移动会更有帮助。
【解决方案2】:

我能够使用code.cmd 脚本通过以下步骤进行设置:

  • 将“自定义”设置为差异和合并的外部工具
  • 指向code.cmd 命令

    C:\Users\[用户名]\AppData\Local\Programs\Microsoft VS Code\bin\code.cmd

  • 使用与@HeyHeyJC 解释相同的命令行参数

    Diff'ing 的命令行参数是:

    --diff --wait "$LOCAL" "$REMOTE"

    对于合并:

    -n --wait "$MERGED"

对我来说,我可以同时使用 Sourcetree 中的差异和合并。


注意:默认情况下 code.cmd 文件包含一个命令行参数来打开CLI 指令 "%~dp0..\resources\app\out\cli.js"每个都打开时间有点乏味!我删除了这个,所以我的文件如下所示,现在只打开从 Sourcetree 发送的文件。

@echo off
setlocal
set VSCODE_DEV=
set ELECTRON_RUN_AS_NODE=1
call "%~dp0..\Code.exe" %*
endlocal

【讨论】:

    【解决方案3】:

    您需要在Sourcetree中进行以下配置

    • 转到 Sourcetree工具选项Diff

    • External Diff / Merge部分,为External Diff ToolMerge Tool选择自定义

    • Diff 参数 → --diff --wait "$LOCAL" "$REMOTE"

    • 合并参数→-n --wait "$MERGED"

    • 配置保存后,进入Sourcetree,右键点击有合并冲突的文件Resolve ConflictsLaunch External Merge Tool

    注意: DiffMerge 命令应该指向C:\Users\<user name>\AppData\Local\Programs\Microsoft VS Code\Code.exe

    【讨论】:

    • 参数 --diff --wait 是 diff 命令现在工作所必需的,如果您之前在没有它们的情况下进行了设置
    【解决方案4】:

    在 macOS 上,将 code 放入“Diff 命令”框中就足够了。然后使用 HeyHeyJC 上面指定的参数

    【讨论】:

    猜你喜欢
    • 2018-03-27
    • 2015-04-17
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多