避免版本分叉的关键不是“锁死文件”,而是先判断分叉的来源:如果冲突来自同一条内容的并行改写,应使用单一权威源加签出机制;如果冲突来自不同栏目各自引用同一份资料,应使用集中存储加引用标识。两种条件对应两种不同选择,混用反而会制造更多分叉。
并行改写指两个编辑同时打开同一份文档,各自保存,后保存者覆盖前者。多处引用指同一份资料被复制到多个栏目或页面,更新时只改了其中一份。两者的证据不同。
判断错误会浪费动作。把多处引用当成并行改写去加签出锁,只会让人排队等待,旧副本依然存在;把并行改写当成多处引用去做集中存储,冲突仍会在保存瞬间发生。
当一份资料需要多人先后修改,且改动会互相影响时,应只保留一个可编辑的权威源,其他位置只读或由该源生成。实施动作分三步。
这个动作的结果是:冲突从“保存时覆盖”提前到“签出时排队”。下一步应观察排队是否集中在少数人身上;如果总是同一两人长时间占用,说明签出粒度太粗,需要把资料拆成更小的可独立编辑单元,而不是取消签出。
当资料本身不常改,但被多个栏目或页面使用时,重点不是防止同时改写,而是防止副本各自漂移。此时应把资料集中存放,各引用位置只保存标识,不保存正文。
实施动作:为每份资料分配一个稳定标识,引用位置写标识而非复制文字;渲染时由标识取回当前内容。这样更新一次,所有引用位置同步变化。结果是不再需要逐处核对,但代价是任何改动都会立即影响全部引用位置,因此改动前必须先确认影响范围。
例外在于:某些引用位置需要保留历史版本,例如已发布公告或存档页面。这类位置不应直接引用最新内容,而应引用带版本号的快照。边界是——只有确实需要留存历史的位置才做快照,否则快照会重新变成难以清理的副本。
假设一个资料页由三人维护,每周改动两次。若采用签出机制,每次改动前需等待前一人归还,平均等待时间取决于占用时长;若采用集中存储加引用,改动无需等待,但每次改动都会同时改变所有引用位置。判断依据是:改动频率高且需要人工确认时,签出更稳;改动频率低且引用位置多时,集中引用更省事。这里的数字仅用于说明比较方法,不代表任何实际项目的表现。
在小样本下,一两个人靠沟通就能避开冲突,规则可以很轻。规模扩大后,参与者增多、改动交叉,原来靠默契维持的做法会出现例外:有人不知道唯一编辑位置、有人绕过签出直接改副本、有人为赶时间复制一份另存。这些例外不是规则错误,而是规则没有被入口和权限固定下来。
因此下一步不是继续口头提醒,而是检查三件事:唯一编辑位置是否在入口可见、只读副本是否真的无法保存、引用标识是否在新增位置时被默认使用。任何一项缺失,分叉都会重新出现。请求量或抓取量归零不能单独证明处理正确,因为那只说明外部访问变化,与内部版本是否统一无关。
选择哪种方式,取决于分叉的主要来源和改动的影响范围;先定位来源,再固定入口和权限,才能让规则在规模化后仍然成立。