【问题标题】:git word diff on non-english text非英文文本上的 git word diff
【发布时间】:2014-11-25 22:13:06
【问题描述】:

如何对人类语言文本(中文)进行逐字比较?

我在一个 git 存储库中有一些中文纯文本。文本已被编辑,我想看看添加/删除了哪些单词。文件中的一行代表一整段文本,所以一个简单的 git diff 是不够的:我们知道在一定数量的段落中发生了一些变化,但我们看不到其中哪些句子/单词发生了变化。

更糟糕的是,正如我所说,文本是中文的。与英语和其他印欧语系不同,中文不使用空格作为单词分隔符。整个段落与中文标点符号组成一个统一的块,不包含任何空格。因此, git diff --word-diff 根本没有帮助。

有没有办法在这样的中文文本的两个版本之间产生人类可读的差异?每个字符是否有等效的 --word-diff ?

【问题讨论】:

    标签: git diff git-diff human-readable


    【解决方案1】:

    icdiff可以满足你的需要。在比较中文文本时,此工具可以逐字显示差异。

    【讨论】:

      【解决方案2】:

      我将其发布为我自己问题的答案,但是,它仅包含解决方案的一部分,即指向正确方向的指针。仍然缺少一些东西。

      How can I visualize per-character differences in a unified diff file? 尝试任一命令:

      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  
      

      【讨论】:

        【解决方案3】:

        逐字逐句diff 应该作为您自己的答案。从doc来看,--word-diff-regex--color-words的关系如下。

        --color-words[=<regex>
          Equivalent to --word-diff=color plus (if a regex was specified) --word-diff-regex=<regex>.
        

        实际上,您可以将word-diff 模式设置为porcelain,以便更好地查看控制台中的diff 输出。

        git diff --word-diff-regex=. --word-diff=porcelain
        

        并且要将输出重定向到文件,您不应使用--color-words(默认--word-diffcolor),因为生成的文本文件无法识别git diff以某种方式编码的颜色信息作为你得到的乱七八糟的东西。可以直接使用--word-diff-regex=.,默认--word-diff模式为plain

        git diff --word-diff-regex=. > diff.patch
        

        【讨论】:

        • 谢谢,但最后我检查了一下,我遇到了与上面最初提到的问题相同的问题:当我处理多字节字符时,我得到了乱码而不是可读文本。
        猜你喜欢
        • 2012-02-07
        • 2011-11-24
        • 2011-12-04
        • 2014-10-07
        • 2018-08-10
        • 1970-01-01
        • 1970-01-01
        • 2016-12-27
        • 1970-01-01
        相关资源
        最近更新 更多