有没有一种方法可以逐句而不是逐行比较文件差异?

10
我想让diff在某些特定类型的文档中更好地工作。例如,在使用LaTeX时,我可能有一个非常长的段落,但如果只更改了一句话,我不想看到整个段落。特别是当我运行某种版本控制并且共同作者与我编辑了相同的段落(但不是相同的句子)时。我不希望这会显示为冲突。那是一个次要问题。主要问题是我是否可以使用diff逐句查看。谢谢。
编辑
wdiff几乎完美。但是是否有合并等效物,如diff和diff3?
3个回答

6

wdiff可以让你获得逐字逐词的差异而不是逐行差异。 我不知道有任何句子逐句差异程序。


我一直在开发一个Python库来解决这个问题... https://github.com/will-hart/PyFreeDiff。虽然现在还处于早期阶段,但已经可以构建和应用两个文件之间的差异了。 - will-hart
@will-hart 我还没有对它做任何事情,但上面的链接应该是 github.com/will-hart-PyTextDiff - J.Merrill

2

在进行文件差异比较之前,请对其进行预处理。编写一个脚本,每行写一句话,任何逐行差异程序都可以工作。

我已经在C令牌级别上完成了这项工作,以便比较C代码,以确保我的CVS合并是正确的。


0
回答14年后,在特定情况下遇到此问题时,使用git diff来考虑(原问题中似乎隐含了这个意图)。
Git diff支持一个--word-diff选项,在这种上下文中,它几乎做的就是问题所要求的。
--word-diff支持多种模式(即color、plain和porcelain)。对于latex和长句子来说,我认为最好的选项是--word-diff=porcelain。它会遍历句子直到找到差异,并将差异分别作为删除/添加对进行输出,然后继续处理句子。
换句话说,如果你将latex从原来的句子中改变了
 This is a common part of the sentence, and previously we had this and the rest is common again

This is a common part of the sentence, but then we changed this part and the rest is common again

然后git diff --word-diff=porcelain将会给出:
 This is a common part of the sentence,
-and previously we had this
+but then we changed this part
 and the rest is common again

(其中-行将被标记为红色,而+行将被标记为绿色)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接