先定一条硬规则:同一时间窗口内,只有一个服务商拥有目标环境的写入权。另一个要么只读,要么在隔离副本上工作。如果两家都直接改生产环境,覆盖几乎不是概率问题,而是时间问题;靠沟通和“改前打招呼”无法可靠避免。
把当前情况分成三类,处理方式完全不同。
判断依据不是“两家改的东西看起来不一样”,而是最终写入的物理位置是否重叠:同一文件路径、同一数据库表、同一对象存储目录、同一份部署产物。只要有一处重叠,就要按串行处理。
如果业务上确实需要两家同时推进,保留并行是可行的,前提是建立隔离和合并机制。
一个假设例子:A 服务商改前端模板,B 服务商改订单接口。两人各自在分支上工作。合并负责人先合并接口,再合并模板,然后一次性发布。结果是一条可回滚的发布记录,而不是两次互相覆盖的推送。如果顺序反过来,模板引用了尚未上线的接口字段,页面就会报错——这说明合并顺序本身就是决策,不是形式。
代价:需要有人持续做合并和冲突处理,交付节奏会变慢。如果你们没有内部技术负责人能承担这个角色,保留双服务商的成本往往高于收益。
发现文件或数据被覆盖,第一步不是追责,而是停止继续写入。具体动作:暂停两家的发布权限,保留当前状态的完整备份,然后对比版本记录找出被覆盖的时间点。
可区分原因的证据有几类:
注意,请求量下降、页面报错或抓取异常都可能由缓存、CDN、临时故障引起,不能单独用来证明“就是被覆盖了”。要拿版本记录和备份比对作为依据。止损动作的结果决定下一步:如果备份能恢复到覆盖前状态,就可以只重放丢失的改动;如果备份不可用,就要评估重做范围,此时继续让两家并行只会扩大损失。
出现以下任一情况,退出比协调更划算:
退出的具体做法是:先冻结退出方的写入权限,要求其提交完整改动清单和未合并内容,再由保留方在隔离副本上验证这些改动是否已包含。验证通过后,才撤销其账号和部署权限。顺序不能颠倒——先撤权限再要清单,容易丢失未提交的工作。
如果两家分别负责完全独立、长期不交叉的模块,且你们有稳定的合并机制,保留并行是合理的。这个条件成立的关键不是“两家都很专业”,而是重叠面可控且有人对合并结果负责。
无论最终保留几家,都要在协作约定里明确三件事:谁拥有生产写入权、发布前需要提交什么证据(分支、提交标识、变更说明)、冲突由谁裁决。规则写在文档里并让双方确认,比事后争论“谁覆盖了谁”有效得多。如果下一轮合作仍要引入新的服务商,这份约定就是交接的基础。