새소식

Programming/VCS

[git-bash] 윈도우/리눅스에서 git diff 한글 깨짐 - 2020.10.20 갱신

  • -

원본 2016.02.15. 09:56 simryang

현재 아래 내용이 잘되지 않아서 검색해보니 LC_ALL 값을 지정하라는 내용이 있었습니다.

 

set LC_ALL=ko_KR.UTF-8

그런데.. 안됩니다.. chcp 65001 도 안됩니다.. i18n.commitEncoding, i18n.logOutputEncoding 도 안먹습니다.. core.page'less --raw-control-chars' 로 지정하는 것은 less 를 찾을 수 없답니다!!! 혹시나 싶어서 powershell 을 실행시켜서 $env:LC_ALL 을 지정해도 안됩니다 ㅜㅜ

한참을 뒤지다가 스택오버플로우 사이트를 뒤지는데 대부분의 답변이 실행이 안되는데 LESSCHARSET을 기존의 latin1 이 아닌 UTF-8로 지정하는 사람이 있었습니다.

커밋 메시지는 이미 유니코드로 작성되어 있었던 경우라 왠지 이거 되지 않을까 하는 생각에 실행해봤습니다.

set LESSCHARSET=UTF-8

LESSCHARSET 을 적용한 후의 git log 결과

Thanks God!! 잘 됩니다!!!!
git 도 버전업이 되면서 내부에 영향을 받는건지 윈도우10 업데이트에 변화가 있는건지는 모르겠습니다.

ps: 참고로... 아래에 설정한 내용 중에 있네요.. 다만, 다른 설정들이 안먹으면서 안되나 보다 이러고 전혀 신경쓰고 있지 않았는데.. 뭐 아무튼 그렇습니다.

ps2: 환경 변수에 아무리 LESSCHARSET=UTF-8 로 등록해놔도 cmd 창 실행하면 여전해서 set 실행해보면 LESSCHARSET 값이 latin1 로 되어 있습니다.. 분명히 설정 되어 있는데.. 시스템 영역에 등록해도 안되고 사용자 영역도 마찬가지로 안되네요.
인터넷을 뒤져 꼼수를 적용하니 잘 됩니다. 근본 원인이 해결되어야 할텐데 일단 잘되고 귀찮으니 이걸로 쓰겠습니다.

레지스트리 편집기(regedit)를 실행시켜서 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor 항목으로 이동해서 문자열 값(REG_SZ)으로 Autorun 을 새로 만들고 거기에 set LESSCHARSET=UTF-8 을 넣어주면 latin1 을 UTF-8로 덮어 씌우고 별 설정 없이도 git log 에 한글 커밋 메시지 잘 보이는 것을 확인했습니다.

이걸로 한참을 삽질하셨을 분들 중 도움되시는 분이 있길 바라며 이만 마칩니다!!

윈도우에서 한글(cp949) 사용중인 경우

참조 글에서 git diff 에 영향 주는 내용만 추출했습니다.

 

먼저 git config에 encoding 관련 설정을 추가해줍니다. i18n 섹션이 없으면 아래 내용 그대로 추가해줍니다.(commit~과 logout~ 앞의 공백은 탭)

$ git config --global --edit
[i18n]
    commitencoding = cp949
    logoutputencoding = cp949

또는

$ git config --global i18n.commitencoding cp949
$ git config --global i18n.logoutputencoding cp949

제어판>>시스템>>고급>>환경변수>>새로 만들기에서 LESSCHARSET 을 만들고 값으로 latin1을 입력.

커밋 로그가 utf-8 인경우 

$ git config --global --edit
[i18n]
    commitencoding = utf-8
    logoutputencoding = utf-8

또는

$ git config --global i18n.commitencoding utf-8
$ git config --global i18n.logoutputencoding utf-8

 

제어판>>시스템>>고급>>환경변수>>새로 만들기에서 LESSCHARSET 을 만들고 값으로 latin1을 입력.

또는

set LESSCHARSET=utf-8

 

리눅스에서 한글(utf-8) 사용중인 경우

먼저 문서의 출처를 의심해봐야 합니다.. 이것 때문에 시간을 많이 잡아먹었네요 ㅜㅜ

동료가 수정한 소스를 분석하는 과정에서 위에 소개된 윈도우의 설정도 동일하게 지정했음에도 불구하고 아래처럼 한글이 깨지게 표시되는 경우가 있었습니다.

원인은 윈도우에서 수정되어 업로드 된... cp949 로 인코딩 된 파일을 열심히 utf-8 os에서 git diff를 시도한 것이었습니다...

참고로 LESSCHARSET=latin1 로 설정된 상황에서 저렇게 보이고 이마저도 설정이 안되어 있으면 한글 주석 부분이 같은 바이너리 값으로 출력이 됩니다.

문서의 코드를 알았고 os가 euc-kr로 설정되어 있고 LESSCHARSET=latin1 로 설정되어 있다면 git diff 한 상황에서 한글 주석이 정상적으로 보였을 겁니다. vim 에서 fileencodings 값에 utf-8,euc-kr 값이 포함되어 있던 탓에 vim에서는 자동 변환되어 정상적으로 보이는데 git diff 결과만 제대로 안보이는 바보같은 상황으로 몇시간을 끌고 있었습니다..

 

해결책은.. 문서를 강제로(!) 유니코드로 변환 저장한 다음 설정을 바꿔주었습니다.(참고 링크).

 

자동 변환해서 지정한 원본 인코딩대로 저장하게 해주는 fileencodings 값을 먼저 제거해줘야 합니다. 그 다음에 강제 변환 후 저장해 주면 됩니다. vim에서 다음과 같이 명령을 내리면 됩니다. 

:set fileencodings=
:set fileencoding=utf-8
:w

git 은 기본적으로 유니코드를 사용하므로 위의 git 설정은 할 필요가 없습니다. 다만 LESSCHARSET 값을 utf-8 로 지정해야 합니다. 이 상태에서 git diff 로 메시지가 정상적으로 보이는 것을 확인했습니다.

$ export LESSCHARSET=utf-8

이래도 안되는 경우는... 만약 겪거나 자세한 상황을 입수하게 되면 그 때 분석해보겠습니다.

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.