git diff で山括弧内に Unicode 記号が表示される 質問する

git diff で山括弧内に Unicode 記号が表示される 質問する

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 diff --color-words=.予想どおり、シンボル間の違いではなく、バイト間の違いをチェックしているようです。

gitUnicode シンボルを適切に動作させる方法はありますか?

上院私の環境について: Mac OS でも Linux ホストでも同じ結果になります。

私のシェル変数は次のとおりです:

BASH=/bin/bash
HOSTTYPE=x86_64
LANG=ru_RU.UTF-8
OSTYPE=darwin10.0
PS1='\h:\W \u\$ '
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
TERM=xterm-256color
TERM_PROGRAM=iTerm.app
_=-l

次のように git config をデフォルト設定にリセットしました。

$ 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

ベストアンサー1

私の場合less、git ページャーが原因でした (@kostix さん、ありがとうございます)。ページャーを完全に無効にして実験してみましょう。

git --no-pager diff p1 p2

私の場合はコミットメッセージに絵文字が含まれていましたが、基本的には同じ問題です。

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

$ git --no-pager log --oneline
93a1866 ��

$ export LESS='--raw-control-chars'
$ git log --oneline
93a1866 ��

$ git config --global core.pager 'less --raw-control-chars'
$ git log --oneline
93a1866 ��

注意:--RAW-CONTROL-CHARSオプションlessにより、ANSI カラー エスケープが通過しますが、他の制御文字 (絵文字を含む) は変更されます。 私のlessはグローバルに で構成され--RAW-CONTROL-CHARS、私の git ページャーは--raw-control-chars上記のように になっています。

おすすめ記事