版本差异展示需要精确到具体改动而非整段替换
别名: 字级差异 · 段落级替换 · inline diff
概念解释
比较两个版本时,人要看见改了什么:哪个词换了、哪一行数字动了、哪张图被换掉。若差异算法把整段当成替换——左边删去一段、右边插入一段——真正改动的那几个字被埋进整段红绿里,回滚和审查都会变成通读。它管的是差的粒度。历史列表能不能打开、自动保存和手动保存怎么标,都不代替这一层。
机制
人找差靠对比局部。整段替换是计算上的偷懒:移动了一句、改了一个标点,哈希一变,整段被标成删除加新增。工作记忆无法在两段长文里对齐相同的句子,只能放弃比较或误把未改的句子当成新写的。精确到词或到句,未改的上下文保持不动,眼睛才能落在那一处。结构改动(标题升级、列表变段落)也应标成结构,而不是正文替换。表格和数字尤其怕整行替换:改了一个单元格,整行变红,审查者看不出是哪一个数。粒度太细到每个空格也会产生噪音,需要把无意义空白折叠,但仍指向「具体改动」而不是「整块换掉」。
怎么研究
准备三种改动:段内改一词、整句移动、一格数字变化。比较整段红绿、词级高亮、表格单元格级。
自变量:差的最小单元(段 / 句 / 词 / 单元格)、移动是否识别为移动、空白是否折叠。 因变量:找对改动位置的时间、把未改句子当成新写的次数、审查完后能否复述改了哪个数。
材料必须长于一屏,否则整段替换的代价看不出来。不要用程序员 diff 标记当唯一界面。图像、画布对象需要另外的对象级差,不要用文本差冒充。
边界
加密或二进制附件无法做词级差,应标明「二进制,整份替换」,不要假装有正文差。极大文件的词级差可能超时,可先出段落级再按需展开,但默认不应停在整章替换。多语言混排、从右到左文字的词切分会出错,出错时应回退到句级并说明「切词可能不准」,而不是给出错误的红绿。
怎么落地
- 文本默认以词或句为差的单元,未改上下文保持原样;识别句的移动,不要显示为删加。
- 表格以单元格为单元;改动的格高亮,同行未改的格不动。
- 提供「只看改动」的视图,跳过未改章节。
- 验证:只改一个数字和一个词,请人在比较视图里指出。若他们必须读完整段红绿才能找到,粒度就是整段替换。再移动一句,看是否被标成移动。