结论是:只有在文件层、数据库层、发布入口三处都做了互斥约定,两个服务商同时改同一网站才可能不互相覆盖;只要发布入口仍是同一个生产目录或同一套后台,任何“分头改、最后合并”的做法都迟早会覆盖。下面把成立条件和会失效的反例说清楚。
“覆盖”通常不是同时点保存那一刻造成的,而是三个不同层面的冲突被混在一起:
判断方法很直接:让双方各改一个只有自己知道的文字,分别发布,再看生产环境剩下哪一个。如果只剩后发布的那条,说明冲突在发布入口,而不是在编辑过程。这个测试只用于定位层级,不能证明谁的操作更规范。
要同时推进,至少满足以下条件,缺一条就要改成串行:
这些条件成立时,两边可以并行;不成立时,正确的做法是排期串行,而不是靠沟通频率去补。
假设一方负责改首页模板,另一方负责改产品页内容,看起来目录和数据都不重叠,于是双方都直接连生产环境操作。这时如果产品页那一方为了批量替换文字,用整站数据库导入的方式执行,导入的是自己较早的备份,那么首页模板所在的数据表配置会被一并回退——即便两人从没碰过同一个文件,覆盖依然发生。
这个反例说明:“分工不重叠”只在双方都使用增量修改时成立。一旦任何一方使用整包替换、整库导入或整站还原,隔离就被绕过。因此约定里必须写明禁止整包覆盖,只能提交差异。
把下面这组动作作为开工前的固定流程:
抽查结果决定下一步:如果两方改动都在,说明隔离有效,可以继续并行;如果只有一方生效,先停止继续改动,回退到发布前版本,再重新确认发布入口归属。这个顺序比反复沟通更快定位问题。
当网站没有独立测试环境、后台只有一个管理员账号、或者任何一方习惯用整站备份还原时,并行改动的风险无法通过约定消除,此时应改为一方改完并验收后,另一方再进场。规模化后出现例外的原因往往就在这里:小样本下靠人盯能勉强避开,一旦改动次数变多、参与人变多,缺少环境隔离和发布唯一性的做法就会失效。
把这些条件逐条对照自家网站,先确定是并行还是串行,再决定要不要同时签两家服务商。