git diff在尖括号中显示unicode符号

git diff在尖括号中显示unicode符号,git,unicode,diff,Git,Unicode,Diff,我有一个带有unicode符号(俄语文本)的文件。 当我修复一些打字错误时,我使用git diff--color words=。查看我所做的更改 在使用unicode(西里尔文)符号的情况下,我会对尖括号产生一些混乱,如下所示: $ cat p1 привет $ cat p2 Привет $ git diff --color-words=. --no-index p1 p2 diff --git 1/p1 2/p2 index d0f56e1..d84c480 100644 --- 1/

我有一个带有unicode符号(俄语文本)的文件。 当我修复一些打字错误时,我使用
git diff--color words=。
查看我所做的更改

在使用unicode(西里尔文)符号的情况下,我会对尖括号产生一些混乱,如下所示:

$ cat p1
привет

$ cat p2
Привет

$ git diff --color-words=. --no-index p1 p2
diff --git 1/p1 2/p2
index d0f56e1..d84c480 100644
--- 1/p1
+++ 2/p2
@@ -1 +1 @@
<D0><BF><9F>ривет
$ git config -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
我已将git config重置为默认设置,如下所示:

$ cat p1
привет

$ cat p2
Привет

$ git diff --color-words=. --no-index p1 p2
diff --git 1/p1 2/p2
index d0f56e1..d84c480 100644
--- 1/p1
+++ 2/p2
@@ -1 +1 @@
<D0><BF><9F>ривет
$ git config -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
git版本

$ git --version
git version 1.7.3.5

我已经看到很多报告,xterm在某些情况下不能真正打印Unicode字符。也许至少是一个解决方案的起点。

对我来说,git寻呼机是罪魁祸首(谢谢@kostix)。通过完全禁用寻呼机进行试验:

git --no-pager diff p1 p2
我的案例是提交包含表情符号的消息;但从根本上讲,这是同一个问题

$ git log --oneline
93a1866 <U+1F43C>

$ git --no-pager log --oneline
93a1866 The solution for me was to use git difftool.

I wrote this tool https://github.com/chestozo/dmp based on https://code.google.com/p/google-diff-match-patch/.

Sometimes it also gives better diff comparing to
git diff --color-words=.
:)

For me best solution to this is setting
export LESSCHARSET=utf-8
.

In this case both
git log -p
and
git diff
shows unicode without problems.

For several platforms setting
LANG
to
C.UTF-8
(or
en_US.UTF-8
, etc.) would work:

$ echo '人' >test1.txt && echo '丁' >test2.txt
$ LANG=C.UTF-8 git diff --no-index --word-diff=plain --word-diff-regex=. -- test1.txt test2.txt
diff --git a/test1.txt b/test2.txt
index 3ef0891..3773917 100644
--- a/test1.txt
+++ b/test2.txt
@@ -1 +1 @@
[-人-]{+丁+}
$git日志--oneline
93a1866
$git--无寻呼机日志--一行

93a1866我的解决方案是使用git difftool

我写这个工具是基于


有时,与git diff相比,它还提供了更好的diff--color words=。
:)

对于我来说,最好的解决方案是设置
export-LESSCHARSET=utf-8


在这种情况下,
git log-p
git diff
显示unicode没有问题。

对于多个平台,将
LANG
设置为
C.UTF-8
(或
en_US.UTF-8
等)可以:

$ echo '人' >test1.txt && echo '丁' >test2.txt
$ LANG=C.UTF-8 git diff --no-index --word-diff=plain --word-diff-regex=. -- test1.txt test2.txt
diff --git a/test1.txt b/test2.txt
index 3ef0891..3773917 100644
--- a/test1.txt
+++ b/test2.txt
@@ -1 +1 @@
<E4>[-<BA><BA>-]{+<B8><81>+}
但是,
LANG
在某些平台上似乎并不受欢迎(例如:

的答案对我来说不起作用,因为即使使用git--no pager diff
我也会看到不可读的字符(不是括号,而是不可读的),所以
更少
不是核心问题

我尝试了很多方法,但唯一有帮助的是在.git\config中包含从西里尔文到utf-8的显式转换(我使用的是windows 7)

注意,我在这里专门更改了
pager.diff
,因为我只有
diff
命令存在编码问题。出于某种奇怪的原因,
log
reflog
与我配合得很好。但如果其他命令也存在编码问题,则应更改所有命令的寻呼机,如下所示:


这不是显示“尖括号”的
git diff
,而是
less
——默认的寻呼机
git diff
调用。尝试导出
LESSOPTS=-R
LESSOPTS=-RX
,看看这是否有帮助。你的问题也有一个问题:你完全没有告诉我们关于你的环境的任何信息。我已经用我的环境详细信息更新了这个问题。我还尝试过这样配置git pager:
$git config--global core.pager“less-R”
,但这没有帮助。我也尝试过这样做:
$git_pager=''git diff--no index--color words=。p1 p2
���ццццц
$GIT_PAGER=''GIT diff--no index--color words=--无颜色p1 p2
П�在字节级别上工作并中断多字节字符。遗憾的是,这个选项也不支持代码点范围(尝试了posix和pcre表示法,但都不起作用)。我认为这个问题存在于2个字节中,用于在shell中表示unicode符号。而
git diff
只知道处理1字节的符号。我不确定这是xterm问题。嗯。。。看起来不像。。。至少这对我来说是有效的diff--git a/README b/README index e69de29..b562a56 100644--a/README+++b/README@@@0,0+1@@@1重要的部分是
--color words=。
,因为我确实想通过符号看到diff。这就是我运行的
git--无寻呼机显示--color words=。
���ццццц
。与git相同--no pager diff--color words=--没有索引p1p2
git config--global core.pager'less--raw control chars'
正是我修复git日志显示问题所需要的!不适合我;有人有其他建议吗?不适合我。我在
.gitconfig
中有
pager=less-rFX
,这就是我得到的。你看到的是
git diff--color words=。
?你有语言集吗?我的是
LANG=en_US.UTF-8
这是我通过
git diff
git diff--color words=。
这为我解决了这个问题。创建了一个新的环境变量
LESSCHARSET
设置为
utf-8
git log
/
diff
现在显示挪威字母,而不是
等。操作系统:Windows 10在我的例子中,LANG var是
en_US.utf-8
,它没有多大帮助<代码>git diff--颜色词=--word diff regex=$'[^\x80-\xBF][\x80-\xBF]*'
是一个很好的例子!谢谢)我会查出来的!如果使用--word diff regex,最好使用--word diff=color,而不是--color(两者的组合)。此外,您可以设置
diff.wordRegex
,以便将来只能提供--word diff=color,git将为word diff使用配置的regex。在git diff中渲染UTF8字符时要小心。通过使用可疑的UTF8字符(零宽度字符)隐藏恶意代码是很有可能的
[pager]
diff = iconv.exe -f cp1251 -t utf-8 | less  
[core]
...
pager = iconv.exe -f cp1251 -t utf-8 | less