避免覆盖的核心不是“谁先改谁后改”,而是先决定同一时间只保留一个写入方,另一个只做只读或待命。只要两个服务商都能直接写生产环境,覆盖迟早发生;把写入权按文件、目录或数据库表切开,只能降低概率,不能消除冲突。
两种前提对应完全不同的做法,选错方向会让后面所有约定失效。
条件一:两边确实在同一时间段内改同一批页面或模板。这时不要试图靠沟通节奏来避让,因为双方看不到对方的编辑动作。合理选择是设一个主写入方,另一个服务商只提交改动清单、补丁文件或待办说明,由主写入方合并上线。代价是另一个服务商的响应变慢,适合改动量不大、以内容更新为主的情况。
条件二:两边只是先后接手,时间上可以错开。这时可以保留两个服务商都能写入,但必须规定“同一时刻只有一方持有写入窗口”。做法是约定交接时间点,前一方在窗口结束前停止写入并交付当前版本,后一方从该版本开始改。代价是需要一次明确的冻结和确认动作,适合改版、迁移、重构这类有阶段边界的任务。
判断依据可以看一个信号:如果两边都在改同一批文件,比如同一套模板、同一个样式表、同一组落地页,就属于条件一;如果一边改结构、一边改文案,且改的文件基本不重叠,更接近条件二。
具体动作分三步,每一步的结果都会影响下一步。
假设一个场景:A 服务商负责页面模板,B 服务商负责文章内容,两边都直接改生产环境。若不给 B 降权,B 保存文章时可能连带覆盖模板文件;若给 B 只读,B 的改动需要 A 合并,模板和内容就不会互相冲掉。这个例子只说明权限切分的作用,不代表真实项目结果。
有些项目确实需要两边都能写,这时要选一个不容易交叉的边界。
不建议按“页面”切,因为同一个页面往往同时包含模板和内容,两边都可能改到同一文件。切分边界越靠近文件或数据表,冲突越少。
覆盖发生后,不要只凭“某次改动不见了”就断定是对方覆盖。可区分的解释至少有三种:一是版本回滚导致改动消失;二是缓存或发布延迟让改动暂时不可见;三是两边确实改了同一文件。前两种情况下,重新发布或等待同步即可;第三种才需要回到单写入方案。
可用的判断动作是比对文件修改时间和版本记录。如果改动消失的时间点与另一方上线时间吻合,且文件内容回到旧版本,更可能是覆盖;如果只是前台看不到但文件内容仍是新的,更可能是缓存或发布问题。确认属于覆盖后,下一步不是追责,而是立即冻结非主写入方的写入权限,再合并双方改动。
如果两边改的是完全独立的对象,比如一方只改站外投放的落地页、另一方只改站内内容页,且两者不共用模板和样式,可以保留同时写入。但要有明确前提:文件不重叠、部署不互相触发、回滚不互相影响。只要其中一项不成立,就回到单写入方案。
另一个例外是紧急修复。如果生产环境出现故障,需要立即改文件,此时可以临时授权一方写入,但要在修复完成后尽快恢复权限,并让另一方核对是否被影响。临时授权不能变成长期状态,否则覆盖风险会重新出现。