当我对文本(或乳胶)文件进行版本控制时,我经常遇到这样的问题:合并/比较工具都是基于行的,而文本文件不是。这导致粒度不足:每个有最轻微变化的段落都标记为不同,或者使用硬换行,段落回流后的每一行都标记为不同。
是否有专门用于比较/合并文本文件的工具可以避免此问题?理想情况下,这将使我能够在句子或子句子粒度级别上恢复并智能地对更改进行分组。
我知道 Latex-diff 存在,这对于可视化变化可能非常有用。我想要一个可以在源代码上运行的工具。
编辑:由于所有合并程序似乎都是基于行的(wdiff很好,但没有行号和合并功能不合适)权宜之计是一个合并程序,可以轻松选择部分要恢复的行(或者甚至可以在合并期间轻松跳入并手动编辑行)。我目前在 os x 上使用 Filemerge,它似乎不允许这样做(理想情况下它是 GUI,因为我没有足够使用它来保证记住击键)。
尽管如此,我还是更喜欢专门设计的东西来实现这一点。我不认为这会那么难。
答案1
我所知道的所有图形比较工具(Meld、KDiff3、Kompare、vimdiff)都是基于行的,因为它们是开发人员工具。不过,我认为可以对它们进行调整,以便您可以将它们用于您的目的。这取决于您是否可以在源文件中的段落中不使用换行符(换行符、ASCII 10),或者是否能够暂时删除它们以进行比较并稍后重新格式化源文件。
在这种情况下,您可以通过将段落合并为一行来比较文本。梅尔德例如,有一个换行设置以提高可读性(不插入硬换行符),并且还可以定义文本过滤器,使您能够忽略不相关的内容,例如格式化标签/命令。我制作了一个 HTML 示例来向您展示我的想法:
(粗略、过于笼统且非常基本)Python 正则表达式HTML 标签是<.*?>
.
答案2
对此的通用解决方案可能是 LibreOffice Writer。加载您的基本文件,然后在菜单中选择
编辑 -> 跟踪更改 -> 比较文档...
并选择要合并到基础文档中的文件。
我最近用它来比较整个页面写在一行上的乳胶文件。但是我必须同意,具有语法突出显示等功能的专用工具会很好