避免版本分叉的关键不在“谁更细心”,而在于先判断同一份资料是否存在两个以上编辑会同时改动的窗口:如果存在,就必须把“可并行编辑”改成“先锁后改、改完即同步”;如果不存在,才适合用分支草稿加定期合并的轻量方式。判断依据是改动频率、同一字段被多人碰到的概率,以及是否需要即时对外可见。
条件一:同一字段会被两人以上在相近时间内修改,例如价格表、库存说明、联系方式、课程时间表。这类资料一旦并行编辑,后保存的人会覆盖前一个人的内容,表面看是“版本分叉”,实际是覆盖丢失。此时应选择独占编辑权加短时锁:谁打开编辑页,谁就持有锁,其他人只能查看或提交修改建议,不能直接写入。
条件二:改动分散在不同段落或不同语言版本,且允许延迟合并,例如产品介绍的长文、帮助中心文章、多语言站点文案。此时可以选择分支草稿加审核合并:每位编辑在自己的草稿副本上改,提交时由一名合并人逐段比对,冲突段落由合并人决定保留哪一版。分支方式的代价是合并耗时,收益是编辑不必排队等待。
判断标准可以落到一个可操作的问题上:这份资料如果晚十分钟对外可见,会不会造成业务损失?会,就用锁;不会,就用分支。这个判断比“团队习惯”更稳定,因为它把编辑流程和业务时效绑定在一起。
无论选锁还是分支,都需要一个最小可用的版本标识。做法是给每份资料分配一个稳定编号,并在每次保存时追加一条变更记录,记录包含时间、编辑人、改动字段和改动前值。变更记录不必做成复杂系统,一段结构化文本即可,例如:
资料编号: price-2024; 时间: 假设的某日 10:20; 编辑人: 甲; 字段: 基础版价格; 旧值: 假设值A; 新值: 假设值B
这个动作的结果是:当两人对同一字段给出不同值时,不需要争论谁记得更准,直接查变更记录就能定位最后一次有效写入。下一步则取决于记录里是否出现同一字段的连续冲突——如果同一字段一周内出现两次以上冲突,说明锁的粒度太粗或太细,应把该字段拆成独立资料,单独加锁。
假设一个站点有价格表和产品长文两份资料。价格表由两人维护,长文由三人维护。价格表采用独占锁:编辑甲打开后,编辑乙只能提交修改建议,甲保存后释放锁,乙再基于最新版本修改。长文采用分支草稿:三人各自改自己负责的段落,合并人每周合并一次,冲突段落按变更记录里的最后有效写入决定。这个假设说明的是选择依据,不是真实项目结果。
如果资料本身是自动生成的,例如由结构化数据渲染出的页面,那么编辑不应直接改渲染结果,而应改数据源。此时版本分叉的根源不在编辑流程,而在数据源是否允许多处写入。处理方式是给数据源加唯一写入入口,编辑只提交数据变更请求,由入口统一写入。这个例外很重要,因为很多“版本不一致”其实是同一份数据被两个入口分别读取和写回造成的。
另一种例外是紧急修正。当线上出现明显错误且必须立即修改时,可以先由一人直接改并标记为紧急变更,事后再补变更记录和合并。但紧急变更不能成为常态,否则锁和分支都会被绕过,版本分叉会重新出现。判断紧急变更是否被滥用,可以看变更记录里“紧急”标记的比例;比例持续偏高,说明正常流程的等待时间或权限设置需要调整。
每周做一次简短核对,只看三件事:同一字段是否出现重复写入;变更记录是否缺少时间或编辑人;合并后是否有人仍在旧副本上继续改。第三项尤其容易被忽略——合并完成后如果没有通知所有编辑切换到新副本,旧副本会继续产生分叉。对应的动作是合并后立即归档旧副本,并在编辑入口显示当前有效版本编号。这个动作的结果是编辑打开页面时能一眼看到自己是否在旧版本上工作,从而减少无效合并。
如果核对发现分叉主要来自“同一人有多份副本”,那么问题不在协作规则,而在副本分发方式;应改为单一入口分发,而不是增加更多审核环节。反之,如果分叉来自“多人同时改同一字段”,则应缩小锁的粒度,把该字段拆出来单独管理。两种原因对应两种动作,不能混用。