非英语文本上的git单词差异

非英语文本上的git单词差异,git,diff,git-diff,human-readable,Git,Diff,Git Diff,Human Readable,如何在人类语言文本(中文)上进行逐字区分 我在git存储库中有一些纯中文文本。文本已被编辑,我想看看哪些单词已被添加/删除。文件中的一行代表一整段文本,因此简单的git diff是不够的:我们知道某些段落中发生了变化,但我们看不到其中哪些句子/单词发生了变化 更糟糕的是,正如我所说,文本是中文的。与英语和其他印欧语系语言不同,汉语不使用空格作为分词符。整个段落,加上中文标点符号,构成一个没有任何空格的统一块。因此,git diff——word diff根本没有帮助 有没有办法让中文文本的两个版本

如何在人类语言文本(中文)上进行逐字区分

我在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