冲突需可见并可选择保留方案
别名: 冲突三向合并 · 保留哪边 · merge conflict
概念解释
两人改了同一处、系统无法自动合成时,就出现冲突。可见指:人能看见两边分别是什么,而不只看见「同步失败」;可选择指:能保留左边、右边、或手工合成,并且这个决定发生在冲突现场,而不是事后在版本堆里翻。它处理的是已经撞上的那一处。在场光标是为了少撞;静默用一方覆盖另一方,是连冲突都不让看见。版本历史的浏览比较是时间轴上的对照,不是这一次碰撞的裁决界面。
机制
自动合并在改动不相交时成立;同一句子、同一单元格、同一计数,合成没有唯一正确答案。若产品把无法合成的情况收成错误码或「请刷新」,人刷新后只能看见活下来的那一方,另一方从工作区消失。可见的冲突把两份候选当成对象:人用自己的任务知识挑,而不是用时间戳赌。选择必须在上下文里做——看见前后句、看见是谁写的——孤立的两段文本会让人挑错。若只能全盘接受某一方,局部其实没撞的改动也会被误伤。冲突界面如果看起来像崩溃,人会关掉重开,等于把选择权交回给静默策略。
怎么研究
构造同一句的两种合法改写(都合理、互不包含),让后同步的一方碰上冲突。比较:刷新后只剩一方、弹出错误无内容、并排展示并可逐处选择。
自变量:冲突是否展示双方文本、选择粒度(整份文档 / 每一处)、是否显示作者。 因变量:丢失仍被需要的那一侧的次数、误拒未冲突段落的次数、从发现冲突到做出保留的时间。
不要用程序员熟悉的冲突标记当唯一材料——非技术用户可能把标记当正文的一部分接受。两人任务知识不对称时(一方知道截止日期改了、一方不知道)更能测出「看见双方」是否必要。这不是在测版本列表好不好找。
边界
字符级实时共同编辑若几乎总能合成,冲突界面会很少出现,但仍要为「同时改同一替换」留一条路径,不能假设永不碰撞。结构完全不同的大改(整章重写对上修几个错字)逐句选择会不可用,应改成章节级选择并警告损失范围。离线很久后的同步可能产生上百处冲突,需要批量「全部要我的 / 全部要他的」再允许逐条改,否则人会放弃同步。权限只读的一方不应收到「请选择保留」,冲突应交给仍能写的人。
怎么落地
- 无法自动合成时,在原位置打开双方文本,标出作者与时间,提供「要这边 / 要那边 / 都留着我来改」。
- 默认选择粒度是这一处,不是整份文档;提供「其余处按同样规则处理」作为显式批量。
- 未决冲突时禁止假装已经保存成功;文档状态写成「有 n 处待你决定」。
- 验证:准备同一句的两种合理改写,让后到的人同步。他们必须能说出两边的词并做出保留,而不是刷新后只剩一方。抽查一处未冲突的段落,确认没有被整份「要他的」误伤。