减少覆盖的关键不是让所有人更小心,而是先判断冲突主要来自同一文件的并发编辑,还是来自同一信息在多处重复维护。前者用版本控制的分支与合并流程解决,后者要把重复内容收敛成单一来源,再决定谁有权改哪一层。
文件级覆盖的典型证据是:两个人改同一篇草稿或同一个模板文件,后保存的人把先保存的内容整段替换掉。信息级重复则表现为同一句介绍、同一个作者署名或同一组导航链接散落在多个文件里,改了一处,其它地方仍是旧值。
区分方法很直接:看冲突发生后,丢失的是“整块改动”还是“某条信息的新旧不一致”。如果整块改动消失,属于文件级;如果多处内容互相矛盾,属于信息级。两类问题的处理成本不同,混在一起谈只会让流程越来越重。
当博客文章、配置和模板都以纯文本文件保存时,优先采用分支加合并请求的方式。每位编辑在自己的分支上完成修改,提交时说明改了哪些文件、为什么改,合并前由另一人查看差异。
实施动作可以这样安排:约定主分支只接受合并,不直接提交;每篇文章或每组相关改动单独开一个分支;合并前先拉取主分支的最新状态,在本地解决冲突再提交。这样做的结果是,冲突在合并前就暴露出来,而不是等到发布后才发现内容被覆盖。
代价是流程变长,适合改动频率中等、对内容准确性要求高的博客。如果一天内有几十次小改动,频繁开分支和等待审核会拖慢节奏,这时需要缩小分支粒度,比如按栏目而不是按单篇开分支。
如果冲突集中在作者信息、页脚、导航、订阅入口这类反复出现的模块,说明问题不在并发编辑,而在信息被复制了多份。此时继续加强合并审核,只能减少症状,不能消除根源。
实际动作是先把重复信息抽成单一来源,例如把作者署名集中到一个数据文件,页面只引用该来源;导航和页脚同理。然后规定:普通编辑只改文章正文,结构类文件由固定的人或固定时段修改。这样做的结果是,多数编辑不再触碰同一批结构文件,覆盖概率自然下降。
例外情况是,如果博客系统本身不支持引用或模板继承,只能靠人工同步,那么应把结构文件的修改窗口固定下来,并在窗口外冻结这类改动。冻结期间收到的结构修改请求先记录,集中处理。
不要一次性把整套规则推给所有编辑。选一个栏目或三到五篇文章,让两人按新流程各改一次,观察是否出现整块丢失或新旧不一致。假设试运行中整块丢失消失了,但出现了多处信息新旧不一,说明问题主要属于信息级重复,下一步应优先做来源收敛,而不是继续加审核环节。
反过来,如果试运行中信息一致但合并冲突频繁,说明分支粒度太粗或改动范围重叠,下一步应把分支拆小,并约定同一文件同一时间只由一人负责。
比较改动前后的冲突次数时,要考虑发布节奏和参与人数的变化。参与编辑增多、改版集中期,冲突本来就会上升,不能把某次下降直接归因于流程调整。更稳妥的做法是记录每次冲突的类型和涉及文件,连续观察若干次改动,看同类冲突是否重复出现。
如果某段时间冲突记录为零,也要检查是否因为改动本身变少、审核被跳过或记录没有坚持。零冲突不等于流程正确,只说明这段时间没有暴露出问题。把冲突类型、涉及文件和当时的改动范围一起记录,才能判断下一步该继续收紧还是可以放宽。