假设我有一个文件,它代表一个带有以下文本的“源文档”:
来源/原始文件:
A quick brown fox jumped over the log
此源文档已由不同作者注释,每个作者都突出显示了文本的不同部分。我们可以假设原始文档中没有任何内容被删除,也没有添加任何新文本(注释标记除外)。
修改/注释文档#1:
A quick <annotation>brown fox</annotation> jumped over the log
修改/注释文档#2:
A quick brown fox <annotation>jumped over</annotation> the log
修改/注释文档#2:
A <annotation>quick</annotation> brown fox jumped over the log
我的问题:我需要将这些不同的注释自动合并到原始文本中并生成一个文档。
合并的最终文件:
A <annotation>quick</annotation> <annotation>brown fox</annotation> <annotation>jumped over</annotation> the log
我尝试了以下方法,但始终未能实现我的目标:
差异/补丁
如果我尝试区分不同的注释文档,则生成的补丁每个都会简单地覆盖先前应用的补丁。
计算每个补丁和原始文本之间的差异似乎确实为少量补丁生成了一个可行的最终产品。然而,我正在处理的典型用例可能包含数十个文档注释。这些注释的数十个补丁不可避免地会产生合并失败。我还没有确定失败的确切原因,但我最好的猜测是为统一差异计算的定位是基于原始的、未修改的文档。一旦应用了多个补丁,后续补丁将不再处理可以通过原始定位解决的目标内容。
我尝试使用Neil Fraser 的 diff_match_patch库来累积这些补丁,希望 patch_make 中的算法能够(神奇地)重新计算差异。我也尝试过使用 git 工具(如 git merge-file),但由于可能与上述相同的原因而失败。
被子
Quilt听起来应该是我的问题的确切解决方案,因为它允许“堆叠补丁”。但我一直在努力让它发挥作用。我努力了:
quilt new multiPatch
quilt import modifiedFile1.patch
quilt import modifiedFile2.patch
quilt add originalText.txt
quilt refresh
Nothing in patch patches/patchMeUp
我不完全清楚我是否可以使用 diff 和 patch 程序生成的补丁。我也不清楚被子是否期望产生补丁或差异。我发现的示例假设修补源树或修改多个文件的多个修补程序。
我的问题:
- 是否有一个简单的工具或(甚至更好)一个 api 或库来完成我正在寻找的东西?
- 我是否在上述方法中做错了什么,我可以修复以获得我想要的结果?
谢谢!