结论先给:如果同一份资料需要多人改,避免分叉的关键不是“提醒大家小心”,而是把可并行修改的范围压到最小,并让每次改动都能被追溯。做不到实时协同的团队,至少应做到“同一时间只有一个人能改正文,其他人只提交待并入的片段”。这个结论有前提:资料本身允许拆成独立片段,且团队接受一定的合并延迟。如果资料是一份必须整体一致的长文档(例如合同条款、价格表、资质说明),片段化反而会制造新的分叉,此时应改为串行编辑加版本冻结。
很多人把版本分叉归因于工具不够好,但更常见的原因是资料没有明确边界。判断方法很简单:让两位编辑分别说出自己负责的范围,如果两人对“哪一段归谁”的回答不一致,那么换任何协同方式都会继续分叉。
可区分的证据大致有三类:
这三类的处理顺序不同。先解决第二类,否则锁定得再严,也只是把矛盾冻结在文档里。
在缺少完整权限、无法部署协同系统的情况下,仍可执行一个最小动作:把资料拆成“事实层”和“表达层”。事实层包括名称、参数、价格口径、联系方式、资质表述,由一人独占维护;表达层包括措辞、举例、段落顺序,可以多人并行。
具体做法是:事实层单独放在一个只有维护人能改的位置,其他人只能通过提交修改说明来请求变更;表达层允许多人各自改,但每次提交时注明改的是哪一段、依据是什么。这样做的结果是,分叉被限制在措辞层面,不会扩散到会引发对外错误的事实层面。
需要提醒的是,这个动作不能推出的结论是:事实层统一之后,表达层就一定不会冲突。表达层仍可能出现两人改同一段的情况,只是冲突的代价更低,通常通过一次人工比对即可合并。
假设一个团队有三名编辑,共同维护一份服务说明页。甲负责参数,乙负责案例描述,丙负责常见问题。若三人同时改同一份文件,最可能的分叉出现在参数被乙或丙顺手改动,而甲不知情。
按上面的拆分:甲独占参数区,乙和丙只能提交“希望把某参数改成某值”的说明;乙和丙各自维护自己的段落。合并时,甲只需确认参数变更请求,不必逐字比对全文。这个例子的数字仅用于说明比较方法:如果原来每周要花时间比对全文,现在比对范围缩小到参数请求列表,但比对频率是否下降,取决于请求数量和合并节奏,不能仅凭一次观察就断定效率提升。
反例是:资料必须整体一致,且任何局部改动都会影响其他部分。例如一份对外报价说明,改一个折扣口径会连带影响多段表述。此时“放开表达层”会让读者看到自相矛盾的内容。遇到这种情况,应改为串行编辑:一次只允许一人改,改完冻结一个版本,下一位在此基础上继续。代价是速度慢,但换来的是可核对的唯一版本。
另一个失效条件是团队无法约定事实层的唯一维护人。如果每个人都认为自己有权直接改参数,那么拆分只是形式,分叉仍会发生。
选一份正在维护的资料,指定一人为事实层维护人,其他人只提交修改说明,持续一个编辑周期。周期结束后检查两件事:一是有没有出现同一事实的两种写法,二是有没有改动只停留在个人副本里。如果两者都没有,说明当前拆分方式可用,可以继续;如果仍出现,说明问题不在工具,而在维护人权限或提交规则没有真正执行,应先调整这两点,再考虑增加协同手段。