-
Notifications
You must be signed in to change notification settings - Fork 384
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FEATURE] 探索支持 3-way merge editor 解决合并冲突的新交互 #1930
Comments
开发计划
进阶 |
@Ricbet 对于每个编辑器(Pre,Current,Result)感觉少了一些标识。 另外编辑器间的引导线有啥方案吗?如果 1,2 编辑器滚动不对齐的情况是不是不太理想 |
@erha19 标示都会有的,会在编辑器的头部展示。 |
默认使用 Myers Diff 算法计算 3 个 editor 文本之间的差异,相关 commit |
|
现有效果 Kapture.2022-11-28.at.14.12.22.mp4 |
当前整体进度在 75% 左右 feature
optimization
final
|
色值也会有所调整,在等设计出效果图 |
amazing, real amazing. |
conflict action 执行后的 undo 和 redo 处理暂时放在第二期搞 |
编辑代码动态绘制 diff 区域还存在以下几个问题待修复
|
结合 Git 插件问题记录 相关 issue: #2094
{
ancestor: URI, // base 分支代码,也就是两个冲突分支的共同祖先分支,直接 open 即可
input1: { // current
description: string, // commit
detail: string, // 分支名
title: string, // 标题
uri: URI
},
input2: 同上👆 // incoming
output: URI // 冲突文件的磁盘文件
} 所以,result view editor 视图加载的 monaco model 会有所调整,改为加载 ancestor
效果预览 default.mp4 |
Closed by #1960. |
背景
目前 opensumi 的解决冲突功能默认是基于 vscode 的 merge-conflict 模块
也就是最常见的在单文件上显示冲突符号 7 个 '<' '=' '>'
所有的操作都集中在 codelens 上执行,这对于冲突代码行数较少的情况下比较方便,任何操作反馈都能在一个窗口中看到
而对于冲突代码行数较多,冲突个数也较多的情况下就比较难看得出来差异
而 vscode 在一次版本更新中提供了 3-way merge editor 视图的解决冲突的新交互
见: 3-way-merge-editor
示例截图:
视图分上下两大块区域,上面是两个冲突文件分别与 base 分支的 diff 差异结果,下面是解决冲突后的 result 结果
整体的视觉风格和 visual studio 的合并冲突有点像
👇这是 visual studio 的
比较不同的是解决冲突的各种操作还是以 codelens 为主,而不是复选框
相关 issue
microsoft/vscode#37350: 社区用户期望在 vscode 里也能使用像是 IntelliJ 或 WebStorm 的解决冲突工具
microsoft/vscode#146091: 3-way 合并视图的 UX 设计
microsoft/vscode#157361: 新的 3-way 视图上线后网友对这个新交互的评价似乎不太友好,较多人反馈学习曲线复杂,总结一句就是 It's not fun!
microsoft/vscode#160806: 在上一个 issue 中饱受用户强力的吐槽之后,将这一功能通过配置来默认关闭了(悲催)
但微软并没有放弃这一个大的新特性,而是作为一个开关配置项并默认关闭,同时在旧版的内联编辑器右下角提供了
resolve in merge editor
按钮来跳转到 3-way 视图模式The text was updated successfully, but these errors were encountered: