vscode 合并冲突:将比较 {当前,传入} 添加到原始文件

wgeznvg7  于 4个月前  发布在  Vscode
关注(0)|答案(9)|浏览(51)

我使用3路合并冲突检查,在这里我可以查看所有当前的更改、原始代码和即将到来的更改。解决冲突的工作流程是将原始代码与当前代码进行比较,然后分别与即将到来的更改进行比较。然后我可以找出哪些更改更容易移植(例如,在当前代码中反映原始到即将到来的更改),然后实际执行更改。一个关键步骤是能够将原始版本与更新后的版本进行比较。
VSCode的合并冲突支持使我能够轻松地将当前代码与即将到来的代码进行比较,但这远不如将其与原始代码进行比较那样具有操作性。是否有可能添加一个功能,在3路冲突中,我可以将当前和即将到来的与原始进行比较?
有用的先例:emacs的smerge-mode允许smerge-refine命令,该命令循环遍历3种可能的比较(原始/当前,原始/即将到来,当前/即将到来)。

gwbalxhn

gwbalxhn1#

Looks like duplicate of #37350

ugmeyewa

ugmeyewa2#

谢谢,@IllusionMH,但我不这么认为。我感觉我一定漏掉了什么,但看起来 #37350 本质上是 git 提供的 diff3 冲突风格的并排表示。这种并排表示非常有用,但我正在寻找更多的东西:逐字(或逐字符)高亮显示实际更改的内容。让我来演示一下。
这是今天在 VSCode 中呈现的三路合并。

使用 merge-conflict.compare ,我可以得到这个:

请注意,orig 被高亮显示,以及 EQ1EQ2 不同的事实。这些高亮非常有用。但这种比较是在当前版本和即将到来的版本之间进行的。我想以相同的方式显示,但比较当前版本和原始版本或即将到来的版本和原始版本。就是这样!不需要三路的花哨(超出 git 已经做的事情)。
为了对比,这里是 emacs:

我已经循环遍历了三种可能的头对头比较,以查看 original-vs-incoming 只涉及一个字符的更改。然后我可以自信地将 EQ2 更改为 EQ1 在当前代码中,接受当前版本,然后继续。没有手动进行逐字或逐字符的比较,我不知道如何在 VSCode 中更轻松地解决这个冲突。
作为一个额外的好处,我希望实现我想要的功能比 #37350 要容易得多。它与现有的 merge-conflict.compare 完全相同,只是更改了要比较的文件。

mzsu5hc0

mzsu5hc03#

我尝试在goldfirere@9f8c9eb中自己修复这个问题,但没有成功(由于我构造的字符串,它还无法通过预提交lint)。我以前从未使用过TypeScript,所以这里可能还有其他一些愚蠢的地方,但提交应该能传达这个想法。希望更有经验的人能用我提供的信息来解决VSCode内部的问题。(它不起作用:不知何故,我的新命令无法被识别。这让我很困惑。)

gz5pxeao

gz5pxeao4#

第一次看时,没有什么特别突出的地方。尝试做一些微小的改变来验证它是否会被编译并在重新加载窗口后被选中。

w1jd8yoj

w1jd8yoj5#

它肯定会重新编译并加载我的更改。如果我只是在原始代码中将这行代码改为使用 conflict.commonAncestors[0].content ,我就能看到我想要的结果。
在我构建的版本中,我的新命令,例如 merge-conflict.compare-current-original 出现在命令面板(当我按 Cmd+Shift+P 时),但执行它会产生一个错误,提示命令不存在。我觉得 registerTextEditorCommand 似乎以某种方式无法正常工作——或者我在不同的地方误输入了命令的名称。但我没有发现我的错误。

11dmarpk

11dmarpk6#

如果没有任何触发器激活扩展,这是可以预料的。尝试为package.json中的每个命令添加onCommand激活事件。我猜你通常不会从命令面板运行它们,这就是为什么onStartupFinished作为唯一的激活事件适用于现有命令的原因。

jucafojl

jucafojl7#

感谢您的建议。我无法使用 activationEvents 解决问题,但您的信息启发了我将本地仓库克隆到一个新文件夹(yarn clean 不是一个东西...我在写这条评论时才想到 git clean),在那里我的新东西可以正常工作。太好了!
接下来有什么好的步骤吗?我已经注意到代码中的一个错误,即如果我点击代码镜头进行比较,光标仍然需要在冲突区域内才能使比较生效。这是因为起初,我不明白冲突是如何传递给操作的。我确信我可以解决这个问题。而且我想通过分别枚举三个可能性来避免构造字符串(幸运的是,三个是小数字)。
但是,除了这个之外的任务超出了我的能力范围:创建测试、编写文档等。我可以花时间做这些事情,但是这个补丁会被合并吗?我不想花时间清理代码并在最后没有回报的情况下学习更多关于如何贡献的知识。或者,等待 VSCode 团队解决这个问题是否是一个更好的策略,基本上将我的补丁作为我对所希望内容的更严格的规范?
您有什么建议吗?
感谢您的帮助!

jc3wubiy

jc3wubiy8#

你能用你最新的代码开一个pull request吗?我想知道只增加更多的代码镜头是否会稍微使UI过载。

4szc88ey

4szc88ey9#

我同意关于代码镜头的看法——实际上这只是一项小实验,看看我所观察到的奇怪行为是否与命令面板有关,我想找到一种新的方法来触发我的新代码路径。我会移除它——很高兴这个功能只对那些寻找它的人可用。
好的。我会稍微润色一下并发布一个PR。谢谢。

相关问题