结论先行:只要两个服务商可能在同一时间段修改同一套线上文件,就必须先确定唯一写入方,再让另一方以只读方式提供改动;否则“谁最后上传谁生效”会覆盖对方成果。这个结论有前提:两个服务商改的是同一环境的同一批文件,而不是各自维护独立站点或独立分支。若两边改的是互不重叠的目录且部署工具能按目录增量发布,覆盖风险会明显下降,但仍需核对发布范围。
第一种是两人都直接连服务器或同一主机面板,改同一批模板、样式或脚本文件。这种形态下,文件修改时间接近并不等于互相覆盖,也可能是其中一方只读取、未保存。要区分,可对比部署前后的文件校验值,并查看主机侧的文件修改记录;若校验值只朝一个方向变化,通常说明只有一方写入。
第二种是两人各自在本地改,再分别上传。此时覆盖常发生在整包上传或整目录同步,而不是单个文件保存。第三种是两人改不同层:一人改内容数据,一人改前端模板。数据与模板分离时,表面看互不干扰,但模板若引用了旧字段名,仍会让对方的内容改动显示异常,这属于逻辑冲突,不是文件覆盖。
把发布权限收拢到一个服务商,另一方只提交改动说明、补丁文件或可合并的代码,由写入方统一发布。这样做的实际动作是:先冻结线上目录的写权限,只保留一个发布账号;另一方的改动以文件清单加校验值的形式提交。结果是每次发布都能对应到唯一来源,出现异常时可回退到上一个发布点,而不是在两人之间互相追问“你刚才传了什么”。
如果业务上必须让两个服务商都能发布,就应把网站拆成边界清楚的模块,例如一方只负责模板与样式,另一方只负责数据导入脚本,并约定各自只动自己目录。前提是部署流程支持按目录发布;若部署工具默认整站覆盖,这个前提不成立,拆分也挡不住覆盖。
这些证据的作用是缩小解释范围。若校验值回退且发布日志显示两个来源先后写入同一路径,覆盖的判断才比较可靠;若只是页面显示旧内容,应先排查缓存与数据层,再决定是否调整协作方式。
假设甲服务商改首页模板,乙服务商改同一首页的样式文件,两人都在同一天下午发布。若甲整包上传,把乙上午的样式覆盖回旧版,线上首页会同时出现甲的新结构加乙的旧样式。此时先不要继续让任一方重传,而是取出甲发布前后的文件清单,确认样式文件是否被整包带回旧版。确认后,下一步是把样式改动并入甲的发布包,或改由甲统一发布,乙转为只提交样式补丁。
如果两个服务商实际维护的是两套独立站点,只是共用同一域名下的不同子域,或者各自使用独立分支且合并前有人工审核,那么“唯一写入方”就不是必须条件,覆盖风险主要转移到合并环节。此时更该检查的是合并规则与发布目标,而不是收拢所有写权限。判断依据是:两边发布是否指向同一套线上文件。若指向不同目标,先不要套用收拢权限的做法。
先列出当前线上目录、发布账号和最近一次发布记录,确认是否存在两个来源写同一路径。若存在,立即冻结其中一个发布账号,把改动改为清单加校验值提交;若不存在,保留现有分工,只补一条合并前核对目标路径的步骤。完成这一步后,再根据下一次发布后的校验值是否稳定,决定是否需要长期保留唯一写入方。