git diff가 잘못된 색상을 표시합니다

git diff가 잘못된 색상을 표시합니다

모든 git 명령에서 컬러 출력을 얻으려면 다음을 설정했습니다.

git config --global color.ui true

그러나 이렇게 하면 다음과 같은 출력이 생성됩니다 git diff.git log

자식 비교 스크린샷

그리고 show와 같은 명령이 git status좋을 것입니다

자식 상태 스크린샷

특정 명령에서 이스케이프된 색상 코드만 인식하지 못하는 이유와 해결 방법은 무엇입니까?

저는 xterm-256colorOS X 10.8.2에서 iTerm 2(터미널 유형)를 사용하고 있으며 쉘로는 zsh를 사용하고 있습니다.

zsh --version
zsh 5.0.0 (x86_64-apple-darwin12.0.0)

git --version                                                                                                                      
git version 1.7.9.6 (Apple Git-31.1)

답변1

이스케이프 시퀀스는 터미널에 디스플레이 색상을 변경하라고 지시하고 이스케이프 문자는 로 나타나며 ESC원하는 동작은 이스케이프 시퀀스가 ​​의도한 효과를 갖는 것임을 알 수 있습니다.

및 파이프 와 같은 git diff명령은 git log출력을휴대용 소형 무선 호출기,less기본적으로. Git은 제어 문자에게 제어 효과를 발휘할 수 있도록 지시하려고 시도 less하지만 작동하지 않습니다.

less그것이 귀하의 호출기이지만 LESS환경 변수를 -ror 가 포함되지 않은 값 으로 설정한 경우 git은 색상을 표시하라고 -R말할 수 없습니다 . less일반적으로 통과 LESS=-FRSX하지만 LESS환경에 설정된 경우에는 통과하지 않습니다. 해결 방법은 호출 시 색상을 표시하도록 git에 지시하는 -R옵션을 명시적으로 전달하는 것입니다.less

git config --global core.pager 'less -R'

less호출기가 아닌 경우 호출기로 전환 하거나 less호출기 표시 색상을 만드는 방법을 알아보세요.

호출기를 호출할 때 Git이 색상을 표시하지 않도록 하려면 대신 color.ui으로 설정하세요 .autotrue

답변2

다음이 있는 경우에도 이 출력을 볼 수 있습니다.바쁜 상자.알파인 리눅스그것을 사용한 대중적인 배포판의 좋은 예입니다. 바라보다https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#How_to_enable.2Ffix_colors_for_git.3F

현재 Busybox를 사용하고 있는지 확인하는 쉬운 방법은 다음을 실행하는 것입니다.

realpath `which less`

아니면 당신이 사용하는 경우생선 껍질

realpath (which less)

출력이 다음과 같은 경우 /bin/busybox설치하여 문제를 해결할 수 있습니다.덜 누.

알프스에서:

sudo apk --update add less

명령은 배포/패키지 관리자에 따라 다릅니다.

답변3

개선된 자일스'답변, git config에서 사용하여 이전 $LESS옵션(예: git config)을 유지할 수 있습니다 ~/.gitconfig.

[core]
pager = less -+$LESS -FRX

관련 정보