结论是:同一时间只保留一个服务商拥有直接改动线上站点的权限,另一个只做建议、审计或待合并的补丁包。这个结论成立的前提是,两份改动都还没有进入上线阶段;如果一方已经在改模板、另一方同时在改内容并各自发布,覆盖就几乎不可避免。更稳妥的做法不是“谁先改谁赢”,而是把改动拆成互不重叠的层,并约定唯一的发布窗口。
两个服务商同时作业时,真正危险的不是意见冲突,而是同一份文件或同一份数据被两次写入。常见有三类:
判断方法是看改动是否落在同一份可写对象上。如果两份工作都只输出建议文档,由站方统一执行,覆盖风险接近零;如果两边都有后台或服务器写入权限,风险就取决于发布顺序,而不是谁的方案更好。
做法一:串行制。先让A完成一个阶段的改动并上线,观察一段时间后,再让B在最新版本上作业。成立条件是项目周期允许等待,且两份工作有明确先后依赖,比如先做技术层再做内容层。代价是总时长拉长,B在等待期内只能做分析和准备工作,不能落笔到线上。
做法二:分区并行制。把站点按目录、语言或页面类型切成互不重叠的区块,A负责区块一,B负责区块二,各自只在自己范围内发布。成立条件是切分边界清晰,且共享资源(导航、页脚、全站模板)由站方单独控制,不交给任何一方。代价是切分本身需要投入,边界模糊时仍会撞车,例如两边都要改同一批栏目的内链。
两种做法都成立时,优先选串行制,因为它把协调成本降到最低;只有当工期紧、且能划出干净边界时,分区并行才更划算。无论选哪种,都要先冻结共享模板的改动权,把它收归站方或单一负责人。
假设站方认为“让两边都只提交文档、由我来改”就安全了。如果两份文档都指向同一个页面标题,而站方按先收到的先改、后收到的再改,实际上仍然发生了覆盖,只是覆盖动作由站方自己执行。这种情况下,串行制的前提——同一时间只有一份改动进入执行——已经被破坏。另一种反例是:一方通过第三方插件或标签管理器注入脚本,另一方直接改主题文件,两者在页面上叠加,表面看都不冲突,实际渲染结果取决于加载顺序。这类改动无法靠“分区块”解决,只能靠约定谁都不碰对方的注入点。
在开工前建一张改动登记表,字段包括:改动对象(文件路径或页面URL)、改动类型、负责人、计划发布时间、当前状态。要求任何一方在改动前先登记,未登记不得发布。这个动作的直接结果是:当两份登记指向同一对象时,会在发布前暴露出来,而不是在发布后才发现。暴露之后,下一步不是争论谁的方案更优,而是按登记时间或约定优先级确定唯一执行方,另一方转为复核角色,在对方上线后再基于新版本提出补充。登记表同时让站方看清哪些对象被反复登记,这些对象就是后续需要收权或加锁的部分。
把发布时间集中到固定窗口,例如每周固定时段统一发布,其余时间只登记不执行。窗口内由一个发布人按登记顺序执行,执行后立即核对关键页面是否与预期一致。如果发现覆盖,回滚到发布前版本,并把冲突对象标记为“需串行处理”。回滚能力本身就是避免覆盖的一部分:没有可回滚的版本记录,两边都倾向于抢着先发,因为谁后发谁就可能被动。约定好回滚责任和版本留存方式,比事后追责更能减少覆盖。
如果站点规模不大,共享模板改动频繁,或者两方都无法接受只做建议不做执行,那么分区并行的协调成本会超过它节省的时间。此时更合理的选择是让其中一方退出执行层,只保留咨询或复核,把写入权限集中到一处。反过来,如果站点结构清晰、内容与技术分层明确、站方有专人负责发布和合并,那么两个服务商并行是可以管理的。取舍的关键不是服务商数量,而是写入权限是否唯一、改动对象是否可登记、发布是否可回滚。这三项里有两项做不到,就应该收敛到单一执行方。