非英语文本上的git单词差异
如何在人类语言文本(中文)上进行逐字区分 我在git存储库中有一些纯中文文本。文本已被编辑,我想看看哪些单词已被添加/删除。文件中的一行代表一整段文本,因此简单的git diff是不够的:我们知道某些段落中发生了变化,但我们看不到其中哪些句子/单词发生了变化 更糟糕的是,正如我所说,文本是中文的。与英语和其他印欧语系语言不同,汉语不使用空格作为分词符。整个段落,加上中文标点符号,构成一个没有任何空格的统一块。因此,git diff——word diff根本没有帮助非英语文本上的git单词差异,git,diff,git-diff,human-readable,Git,Diff,Git Diff,Human Readable,如何在人类语言文本(中文)上进行逐字区分 我在git存储库中有一些纯中文文本。文本已被编辑,我想看看哪些单词已被添加/删除。文件中的一行代表一整段文本,因此简单的git diff是不够的:我们知道某些段落中发生了变化,但我们看不到其中哪些句子/单词发生了变化 更糟糕的是,正如我所说,文本是中文的。与英语和其他印欧语系语言不同,汉语不使用空格作为分词符。整个段落,加上中文标点符号,构成一个没有任何空格的统一块。因此,git diff——word diff根本没有帮助 有没有办法让中文文本的两个版本
有没有办法让中文文本的两个版本之间有一个人类可读的差异?每个字符是否都有一个对应的--word diff 我将此作为我自己问题的答案发布,然而,它只包含解决方案的一部分,一个指向正确方向的指针。有些东西还没找到 从 请尝试以下任一命令:
git diff --word-diff-regex=.
git diff --color-words=.
上面两个命令中的任何一个都能让我非常接近。然而,我有两个问题。
如果我简单地键入上面的命令并查看控制台中的输出,我只会看到每个段落的开头。整个线路不适合控制台,git截断了末端(即大部分!)
或者,如果我尝试重定向到一个文件:
git diff --color-words=. > diff.patch
然后使用vim查看文件,我得到一些混乱的东西,看起来更像二进制代码,而不是任何人类可读的东西
更新:我最终使用了这个解决方案:
wget https://git.kernel.org/cgit/git/git.git/plain/contrib/diff-highlight/diff-highlight --no-check-certificate
chmod u+x diff-highlight
git diff --color=always | ./diff-highlight | less -R
逐字
diff
应该作为您自己的答案。从中,--word diff regex
和--color words
之间的关系如下所示
--color-words[=<regex>
Equivalent to --word-diff=color plus (if a regex was specified) --word-diff-regex=<regex>.
要将输出重定向到文件,您不应该使用--color words
(默认情况下--word diff
作为color
),因为生成的文本文件无法将通过git diff
以某种方式编码的颜色信息识别为您得到的混乱。您只需使用--word diff regex=。
,默认的--word diff
模式为普通模式
git diff --word-diff-regex=. > diff.patch
可以满足你的需要。当比较中文文本时,此工具可以逐字显示差异。谢谢,但上次我检查时,我遇到了与上面提到的问题相同的问题:因为我处理的是多字节字符,所以我得到的是乱码,而不是可读文本。
git diff --word-diff-regex=. > diff.patch