git diff muestra símbolos unicode entre paréntesis angulares

Tengo un file con símbolos Unicode (text en ruso). Cuando corrijo algún error tipográfico, uso git diff --color-words=. para ver los cambios que he hecho

En el caso de símbolos unicode (cirílicos), me da un poco de confusión con los corchetes angulares, así:

 $ 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>ривет 

Parece que git diff --color-words=. está comprobando la diferencia entre bytes y no entre símbolos como espero.

¿Hay alguna manera de decirle a git que funcione correctamente con símbolos Unicode?

UPD sobre mi entorno: obtengo lo mismo en Mac OS y en el host de Linux.

Mis vars de shell son:

 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 

He reiniciado la configuration de git a la configuration pnetworkingeterminada de esta manera:

 $ git config -l core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true 

git versión

 $ git --version git version 1.7.3.5 

Para mí, less (el buscapersonas de git) tenía la culpa (gracias @kostix). Experimente deshabilitando el buscapersonas por completo:

 git --no-pager diff p1 p2 

Mi caso fue enviar posts que contenían emojis; sin embargo, es fundamentalmente el mismo problema.

 $ 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 🐼 

NB : la --RAW-CONTROL-CHARS hace que less pase por los escapes de color ANSI, pero seguirá consumiendo otros caracteres de control (emoji incluido). Mi less está configurado globalmente con --RAW-CONTROL-CHARS y mi paginador git con --raw-control-chars como arriba.

Para mí, la mejor solución para esto es establecer la export LESSCHARSET=utf-8 .

En este caso, tanto git log -p como git diff muestran unicode sin problemas.

La solución para mí fue usar git difftool.

Escribí esta herramienta https://github.com/chestozo/dmp en https://code.google.com/p/google-diff-match-patch/ .

A veces también da una mejor diferencia en comparación con git diff --color-words=. 🙂

He visto muchos informes de que xterm no puede imprimir caracteres Unicode en algunos casos. Tal vez al less sea un punto de partida para una solución.