Vscode: Git:使用 VS Code 作为合并编辑器

创建于 2016-04-25  ·  96评论  ·  资料来源: microsoft/vscode

1.0.0 引入了使用 VS Code 作为 git difftool 的能力。 相关的全局.gitconfig行如下:

[diff]
    tool = default-difftool
[difftool "default-difftool"]
    cmd = code --wait --diff $LOCAL $REMOTE

如何将 VS Code 用作 git mergetool

我相信,它需要接受的相关论点是$LOCAL$REMOTE$BASE$MERGED

feature-request git

最有用的评论

我们不会有任何其他方式。 😉

所有96条评论

尚不支持。

此功能是否会包含在下一次迭代中?

可能不会,这是一项艰巨的任务,因为需要实现合并 UI。

合并 UI 是否有计划支持三路合并? (例如更改a,更改b,共同祖先)

我们不会有任何其他方式。 😉

不能对此给予足够的支持。 这是我回退到不同的编辑器/IDE(咳嗽* memory-hog Webstorm *cough )的最佳方案:)

如果可能的话,这将是天赐之物,原因如下:

  1. Meld 虽然功能强大,但严重缺乏与可配置键绑定和颜色突出显示相关的功能,并且在我的 Windows 机器上启动确实_really_慢,即使安装在 SSD 上也是如此。
  2. 我希望合并编辑器也接受与我的主文本编辑器相同的 .editorconfig/settings ,如果 vscode 确实填补了这个空白,那就太棒了。
  3. 在较小的级别上,编辑器主题和对界面的熟悉也是一个加分项——有时我或我的团队在合并时会由于没有语法高亮而出错,虽然这很小,但在生产系统中造成了巨大的错误。 其中一些错误在发生之前很难理解。 _我猜mergetools总是会有类似的问题_,但如果可以在一个写入的相同环境中合并,它们可能会减少。

就像我说的,meld 是 _ok_,但如果有一天 vscode 能在那种情况下使用,那就太好了。

Visual Studio 一直是我的代码合并选择。 很想看到这个功能!

使用其他 git mergetool 没问题,但真的很想看到自己的合并 UI 很快就会发生!

😐 嗯。

我希望这些功能在重量级 IDE 中出现。 在 vscode 的轻量级编辑器类(我会考虑 atom、sublime 等)中,我没有。 对于与 git 相关的活动,我倾向于使用终端和 vim 来解决冲突。 GUI 人群已经有很棒的单任务器,如融合、差异合并、万花筒等。

@kumarharsh这是关于即时反馈的一个好点(例如;linting。)走上面的 vim 路线,我想你可以将 git 的默认外部编辑器设置为 vscode ......虽然为项目特定的 linting/ 提供上下文可能会很痛苦语法/等规则。

+1

这个功能可以作为vscode的扩展来实现吗? 或推荐的任何存在的分机。

我不这么认为,因为我可以看到不允许扩展来创建 ui 功能

Enviado do meu 电话 Windows 10

德:坦克隋
Enviado:quarta-feira , 7 de dezembro de 2016 10:41
段:微软/vscode
抄送:赫伯特·皮门特尔; 评论
Assunto: Re: [Microsoft/vscode] 使用 VS Code 作为 git 合并工具 (#5770)

这个功能可以作为vscode的扩展来实现吗? 或推荐的任何存在的分机。

您收到此消息是因为您发表了评论。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

该插件可以提供 UI 功能:查看 Git History。 它呈现一个 webview,它可以“潜在地”用作合并工具。 但是我认为如果没有 vscode 本身的某种程度的支持,插件将很难做到这一点。

万花筒、融合等工具的主要问题是非常典型的用例:
在合并期间编辑结果。 就像,你知道的:从左边接受这条线,从右边接受这条线,另外,添加这个小修复,这样它们就可以一起工作了。
船长明显报告:合并工具在合并方面很好:D
但是使用 ie meld 编辑是完全痛苦的,尤其是当你习惯了 vscode 这样方便的工具时。 这就是为什么大多数开发人员希望在他们的编辑器中集成合并工具。

让我们看到差异(编辑器中非常有用的功能)但不给我们合并的方法非常令人印象深刻

VS Code 扩展非常适合合并冲突。

+1

Git 并排冲突解决程序在最新的 VS 代码中不起作用。

版本 1.10.2
提交 8076a19fdcab7e1fc1707952d652f0bb6c6db331
日期 2017-03-08T14:02:52.799Z
壳牌 1.4.6
渲染器 53.0.2785.143
节点 6.5.0

真的希望能够在使用我的代码编辑器(vscode)的同时编辑代码,而不必使用其他编辑器。

这是在敏捷开发项目中工作时能够完全迁移到 VSCode 的“必备”功能。 如果 git 功能不完整,集成的合并工具可以节省大量时间。 我希望我们能尽快拥有这个。

+1

我需要合并工具

我现在可以推荐“更好的合并”扩展...

是的,这就是我现在正在使用的,非常好!

因此,我认为这个问题可以关闭吗?
2017 年 4 月 30 日星期日下午 4:58,Ali Robertson通知@github.com
写道:

我现在可以推荐“更好的合并”扩展...


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/Microsoft/vscode/issues/5770#issuecomment-298222866
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAU8Q2JVio1PlIvEb8S1zg2cf5tzxxciks5r1Fs9gaJpZM4IPCMA
.

>

从 iPhone 发送

@alirobe better merge 没有像 meld 这样的三个版本的窗口
好像 vsc 只有三个窗口,但没有人实现合并工具?

@nchammas@joaomoreno和所有其他感兴趣的人,
今天我使用 VS Code 作为我的git mergetool进行设置,并在StackOverflow 上进行了解释:如何使用 Visual Studio Code 作为 Git MergeTool 的默认编辑器(它解释得更详细,所以请查看!)。

这是速度版本:
您可以直接编辑.gitconfig并粘贴

[merge]
    tool = vscode
[mergetool "vscode"]
    cmd = code --wait $MERGED

或从命令行输入

  1. git config --global merge.tool vscode
  2. git config --global mergetool.vscode.cmd "code --wait $MERGED"

然后在合并冲突的 git 目录中使用git mergetool ,然后 ta-da 😄!

您应该会看到一行字,上面写着Accept Current Change | 接受两个更改 | 在有问题的更改所在的位置

只需确保在关闭 VS Code 之前保存文件

我喜欢它有代码镜头“接受当前更改|接受传入更改|接受两个更改|比较更改”,当您单击“比较更改”时我喜欢并排差异,但它不允许我编辑任何内容与您在 Visual Studio 的合并工具或 Meld、Winmerge 或 Beyond Compare 等其他工具中看到的第三个组合面板相一致。 我很想在并排比较中看到第三个面板,以便我可以进行更多自定义合并。

@jaxspades ,FWIW,当我需要自定义时,我要做的是接受两者,然后进行编辑。 到目前为止,这已经足够好了,尽管我还没有使用它进行特别多毛的合并。

“真正的”Visual Studio 是一个很棒的合并工具,FWIW。 我很想在 VS Code 中看到这个功能。

+1 到@zneak

当前采取这个或那个块是很糟糕的,并且浪费了大量的时间、重构和错误。 我希望能够像 VS 一样逐行挑选。

在分支中弹跳时,文件更改的误报也是一个问题。

我喜欢这个工具,只是缺少这个区域。

你好
在 VScode 中需要是默认的合并工具。
我们有很酷的 diff-tool,而且 vsc 可以分成三个部分,所以.. 只需要实现它。
我们可以通过社区使用 ext 来实现它,但我们不允许更改 UI。 我们可以在 ui 中构建自定义按钮,所以请帮助我们

我在 Windows 和 Mac 上使用 kdiff3 作为我的默认git mergetool 。 它具有 4 视图 3 路合并,非常好的自动分辨率,并且它是免费的和跨平台的。

5月,更好的合并被整合。 这通过添加合并 UI 有效地解决了该问题。
https://code.visualstudio.com/updates/v1_13

Ericop 提供了有关配置 vscode 以使用“更好的合并”界面作为上述合并工具的说明。

因此,这个问题应该被关闭,解决。

@alirobe我不认为这个合并很好,也许它看起来像融合,三个编辑器显示 LOCAL,BASE,REMOTE

@zjjott可以理解,我建议打开一个新问题,要求对现有功能进行特定增强,并在此处引用。

@joaomoreno根据您的评论,我们将来会看到 3 路合并吗?

@zjjott kdiff3 做得很好(本地、基础、远程和结果视图)。 当这个现有的跨平台工具已经如此出色时,我真的不确定为什么人们需要/希望在 vscode 中提供额外的功能。

@RoyTinker因为我通常不只是“合并”。 你必须编辑一些东西(当一些冲突发生时),当你编辑一些你想要你最好的编辑器时,而不是 kdiff3 有的东西(它可以,但 vscode 好多了)

您为什么不与@eamodio 交谈并导入他在GitLens for VSCode上的出色工作?
我对此非常满意,尤其是在浏览冲突文件时,当我在一个视图中对两个流进行更改,并且可以接受当前更改、传入更改、两个更改甚至一次编辑它们时。
它非常接近理想,只是有时它会在 Windows 上出现行尾问题,然后只有完整的 Visual Studio 来拯救。
否则,我曾经有过来自 IDE 的最佳 git GUI 体验。

@m-wilczynski 虽然我真的很感激这些客气话——合并冲突支持不是 GitLens 的一部分——它直接内置于 vscode 本身(它最初是另一个被引入核心的扩展)

@eamodio - 对不起,不知道。 😄 并没有改变这样一个事实,对于我(以及我的大多数使用 VSCode @ 工作的同事,由于我的建议)VS Code 在没有 GitLens 的情况下使用 git 毫无用处。
使用 GitLens,即使我没有在 atm 中编码(主要用于 TypeScript 和 JavaScript),我也渴望打开 VSCode,只是为了清楚地看到这个合并中正在发生的事情。
这一切都与用户体验有关。
即使 VSCode 包含了所有内容,并且您只需要正确地可视化它 - 您是我出色的用户体验的罪魁祸首。 😉

@m-wilczynski 非常谦虚。 谢谢你——我非常感谢你的客气话!

现在已经有两年了……恕我直言,这仍然是目前最明显的缺失功能之一。 很想让 VSCode 成为我的合并工具。

@tracker1这个问题在技术上已经解决了: https ://github.com/Microsoft/vscode/issues/5770#issuecomment -308533904。 我不知道为什么它还没有关闭。

@joaomoreno这个问题可以关闭吗?

我认为它仍然开放的原因(以及我仍在观看它的原因)是人们正在寻找 vscode 中的并排三向合并功能。 例如,我目前使用融合(示例截图)。

是的,当 git 有冲突(重命名/重命名)并且 $MERGED 文件出现空白并且仍然需要编辑 diff $LOCAL $REMOTE 命令时,我们会遇到这种情况,我在下面使用这个 cmd 来解决这个问题

code --wait --diff $REMOTE $LOCAL | cp $LOCAL $MERGED

但是这些可以分成单独的问题 - 这个特定问题的主要工作是在 IMO 完成。

也许#5770 中显示的内容适用于微小的更改,但对于大的更改来说体验不佳,您确实需要 3 或 4 窗格体验才能正确执行此操作。

我目前使用 Visual Studio (proper) 作为 MERGE/DIFF 工具,并在未安装 Visual Studio (proper) 时使用 MELD。 这些可以完成工作,但是如果能够使用与在第一宫中编写代码相同的工具来编辑代码,那就太好了。

如果他们想关闭它,那很好,因为它_可以_用作合并工具,但是我们应该立即创建一个问题来捕获并排的三向差异功能。

现在 vscode 可以选择让两个以上的窗口可见。 (从 v1.24.0 开始)。 我自己没有尝试过 3 方式合并,但现在肯定有可能

这肯定是这个了不起的编辑器的最大缺点

三路合并是必须的。 当前执行 git merge 的方式在使用时非常粗糙。

请添加三路合并

@michaelKurowski是的,最近我听到同事抱怨 VScode 合并功能,但没有深入细节。 所以简而言之,如果这方面可以改进,对vscode来说会很好。

请添加三路合并

我不确定我是否完全理解。 这里的人似乎在要求三向合并,但似乎 VSCode 已经有了三向合并,如这个屏幕截图所示。

image

但是,据我了解,无法从命令行调用三向合并。 正如最初的帖子所提到的,这将涉及一种在命令行上使用四个参数进行调用的方法:基本文件、两个不同的修订版本以及写入最终合并结果的路径。

在我的情况下,我想使用 VSCode 作为 Perforce 而不是 Git 的合并工具,但假设 VSCode 在命令行上接受这四个文件名,那么你使用哪个源代码控制软件并不重要,合并的概念是一样的。

是否应该将此问题称为“添加命令行选项以调用现有的 3 路合并功能”之类的东西,或者我对 VSCode 中的当前合并实现有什么误解,除了缺少命令行使用之外,这使得它不合适对于 git 三路合并?

我不确定我是否完全理解。 这里的人似乎要求三路合并,但似乎 VSCode 已经有了三路合并,如这个屏幕截图所示。

image

但是,据我了解,无法从命令行调用三向合并。 正如最初的帖子所提到的,这将涉及一种在命令行上使用四个参数进行调用的方法:基本文件、两个不同的修订版本以及写入最终合并结果的路径。

在我的情况下,我想使用 VSCode 作为 Perforce 而不是 Git 的合并工具,但假设 VSCode 在命令行上接受这四个文件名,那么你使用哪个源代码控制软件并不重要,合并的概念是一样的。

是否应该将此问题称为“添加命令行选项以调用现有的 3 路合并功能”之类的东西,或者我对 VSCode 中的当前合并实现有什么误解,除了缺少命令行使用之外,这使得它不合适对于 git 三路合并?

我相信他们希望看到这样的东西:
https://user-images.githubusercontent.com/1470309/32250860-c677e4ce-bec0-11e7-82b5-0196d981cc28.png

@michaelKurowski我明白了。 也许有两个不同的问题,

  • 三向合并的可视化。 (当前实现显示内联合并,而有些人要求使用三列视图)
  • 使用 VSCode 作为从命令行调用的 3 路合并工具的能力。 (这将需要一个类似于当前--diff file1 file2但具有合并支持的命令行选项,例如--merge basefile revision1file revision2file mergedfile

我的印象是,最初的发帖人要求的是更像后者的东西(使用当前的可视化似乎很容易实现),而对合并的三列可视化的请求则有点复杂和开放式的请求,并且也许这两个单独的请求之间的混淆导致这个问题得到解决?

好的,感谢@uglycoyote@michaelKurowski的澄清,所以您认为我们是否应该创建一个专门用于三列差异视图的新问题/功能请求?

如果@joaomoreno可以评论@JeanPerriault的问题以及我关于是否应该将这个问题一分为二的建议,那就太好了,因为他似乎在 VSCode 团队中。 但从他之前对“需要实现合并 UI”和“我们不会有任何其他方式(除了三向合并)”的回答来看,他似乎看到了我提到的两个问题作为一件事。

@joaomoreno ,在短期内首先实施命令行选项以公开现有的合并行为是否没有意义? 我个人会很好地使用当前的内联合并,并且没有发现 3 列视图是必不可少的(尽管它可能很好)。 但是,如果将现有的合并连接到命令行是一项简单的任务,那么我不希望它因为 VSCode 团队缺乏实现更出色的 3 路合并可视化的意愿而无限期地停滞不前。

是的,给我们一个可视化的合并视图/编辑器,比如http://meldmerge.org/

WinMerge 像老板一样工作
after-3way-merge

是的,给我们一个可视化的合并视图/编辑器,比如http://meldmerge.org/

我使用 Meld,虽然我希望看到 VSCode 做同样的事情,但老实说,我认为使用 Meld 没有问题。

@lig为什么我必须使用 vscode 进行编辑? 我可以用记事本

@josser只需使用更适合您当前任务的任何工具。 我认为这场圣战是题外话。

@lig我只是想解释为什么人们要求将合并工具集成到vscode中
因为他们喜欢 vscode,不喜欢其他工具。 合并也是编辑。 即使编辑是合并过程的一部分,您也希望在可爱的编辑器中编辑文件

看看这个评论: https ://github.com/Microsoft/vscode/issues/5770#issuecomment -265497516

@josser就像之前在这个线程中多次提到的那样,最初的问题可以通过设置 git 以使用 VSCode 作为合并工具并在冲突期间运行git mergetool来完成,这会打开运行良好的 VSCode 合并流程对于我和其他用户。

如果您希望在使用 VSCode 作为合并工具时看到类似 Meld 的界面,_请在单独的问题中创建单独的功能请求_,这样我们就可以停止向这个线程发送垃圾邮件,因为本质上是_一个不相关的功能请求_。

@lig我只是想解释为什么人们要求将合并工具集成到vscode中
因为他们喜欢 vscode,不喜欢其他工具。 合并也是编辑。 即使编辑是合并过程的一部分,您也希望在可爱的编辑器中编辑文件

看看这个评论: #5770(评论)

简单易行! 这正是人们想要的。 为什么这么难理解? 我开始一个差异,下一步是合并。 它属于一起,任何分离都完全违背了良好的工作流程,而且只会浪费时间。 我想使用 Visual Studio 代码编辑器并且没有外部工具。

我还希望 VS Code 可用作三向合并编辑器。 接受或拒绝左侧或右侧的更改,并在提交更改之前修改结果。 这将大大改善 VSCode。 使用这么多强大的 git 功能确实没有任何意义,除了其中一个重要功能:合并。

让它像 JetBrains 一样。 (https://github.com/Microsoft/vscode/issues/37350)

老实说,融合合并看起来很丑陋。 这是2012年的吧? 它看起来像是从 2003 年开始的。为什么每次我想进行 3 路合并时都要进行时间旅行?

已创建一个新问题以具有三向合并视图: https ://github.com/Microsoft/vscode/issues/37350

有人花时间为三路合并 UI(如这里推荐的)打开一个单独的问题,并配有漂亮的模型,只是让它立即关闭。 =(

@mofahead看起来我创建的那个是 #37350 的副本 .. 尽管关闭时提到了这个问题。

在启用它作为合并编辑器之前改进https://github.com/Microsoft/vscode/issues/8226会很好

大家好你们好!

您可以按照教程将 VSCode 配置为官方 git.mergetool:

https://stackoverflow.com/a/44549734

人们在这里提到 UI 方面和合并功能似乎有些混淆。 对我来说,当今 VSCode 中最大的生产力杀手是合并垂直工作而不是并排工作的事实。

老实说,我不明白这怎么可能被远程认为是这个功能的可接受的 UI。 无用。

对于那些使用 Mac 的人,这里有一个解决方法。

  • 安装差异合并
  • 安装 VSCode Git 差异和合并工具
  • 编辑~/.gitconfig
    添加
[diff]
        tool = diffmerge
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"
[merge]
        tool = diffmerge
[mergetool "diffmerge"]
        cmd = diffmerge -merge \"$LOCAL\" \"$BASE\" \"$REMOTE\"
        trustexitcode = true
        keepbackup = false
  • 在 VSCode 中,转到源代码管理,右键单击该文件并选择Launch merge tool

唯一的问题是,我无法让文件在所有情况下都自动合并回 VSCode。

多年来一直在 Mac 和 Windows 上使用 diffmerge。 几个月前切换到 Sublime Merge。 我真的,真的很喜欢它。 它很快,很现代。 当我需要在那个环境中工作时,我也在 Windows 上使用它而不是 Visual Studio。

返回 emacs 以获取非 VCS 控制目录的差异和合并 :(

VS Code 有一个不错的插件 L13D 用于比较目录(例如,源计算机和目标计算机之间的配置目录),但是如果没有 git 或其他一些版本控制,您将无法合并。

因此,对于此任务,创建会话然后选择性地合并我想要的内容是 emacs 的diff-directories 。 我正在尝试离开 emacs,但我仍然发现它偶尔会做一些 Code 做不到的事情。

VS Code 有一个不错的插件 L13D 用于比较目录(例如,源计算机和目标计算机之间的配置目录),但是如果没有 git 或其他一些版本控制,您将无法合并。

你有 L13D 的链接吗?

我不确定我是否完全理解。 这里的人似乎在要求三向合并,但似乎 VSCode 已经有了三向合并,如这个屏幕截图所示。

image

这适用于完全微不足道的合并冲突,但我遇到了只使用 VSCode 的公司的人,他们关于“合并冲突”的整个想法是基于 VSCode 过于简单化的差异。 而且,当他们遇到非平凡的合并冲突时,他们总是至少一次“选择一边”(基本上是在几行中删除某人的更改而不是合并它们)。

我们在 VSCode 中需要一个类似融合的界面,不仅因为它很酷,而且因为没有它,我们鼓励年轻开发人员的不良做法。

这不仅仅是“年轻的开发者”。 我已经编码了 20 年,并且 3 窗格合并更好。 如果您可以一次查看每个版本的代码的全部内容,您在使用内联差异时发现错误。

我想看到三个窗格,每个窗格中的基本提交都有差异。 这样就可以很容易地看到哪些地方发生了变化,哪些变化需要保留和不保留。

@lig我只是想解释为什么人们要求将合并工具集成到vscode中
因为他们喜欢 vscode,不喜欢其他工具。 合并也是编辑。 即使编辑是合并过程的一部分,您也希望在可爱的编辑器中编辑文件

因为 VSCode 不仅仅是一个美化的文本编辑器。 它是一个带有 linter 和智能感知的 IDE。 它甚至会解析我的 Python 代码中未定义的变量。 而且我发现在合并时能够实时查看 linter+intellisense+etc 的提示非常有用。 当我选择接受哪些线路时提供。

使用“愚蠢”的合并工具会更难在合并中发现错误,甚至在合并并返回 VSC 后更正错误。

这是阻止我回到 VS Code 的 2 或 3 件事之一

这是在 2020 年的路线图中-

提供完整的合并支持(3 向)

见 - https://github.com/microsoft/vscode/wiki/Roadmap#scm

我刚刚将我的扩展VS Code 发布为 Git Mergetool 。 它不像其他合并冲突编辑器那样功能丰富,但应该是可用的。 默认情况下,我配置了一个 4 窗格布局,我发现它比经典的 3 列布局更实用。 注意反馈!

它在 Marketplace 中尚不可用,因此您需要从 GitHub 下载并手动安装。 在市场上可用._

你好@zawys

它是否支持比较我将合并 oprhan 文件的 3 个或 4 个文件夹?

@gusbemacbe

在当前状态下,该扩展主要被认为是适合git mergetool界面的“三向”文件合并工具。 这仍然是首要目标。 但是,我计划扩展该功能,以便不需要运行 git-mergetool 进程,因为那个小 shell 脚本有一些自己的 UX 缺陷。 相反,我想将扩展更多地与 VS Code 集成。

在这个过程中,我将克隆 git-mergetool 的一些功能,例如解决删除和符号链接合并冲突。 我不确定这涵盖了您的用例多远。 也许我还可以添加例如一个 accept-all-incoming-in-folder 命令。 请打开一个问题
扩展进一步讨论。

我的扩展现在可以在 Marketplace上找到。

我的扩展现在可以在 Marketplace上找到。

202010-04_0859_27__

@InLaw您需要更新您的 VS Code 才能使用该扩展。 如需进一步讨论,请在扩展程序的站点上创建错误报告。

此页面是否有帮助?
0 / 5 - 0 等级