나는 언제나 줄바꿈 문자를 ‘\n’로 통일한다. 내가 참여하는 모든 프로젝트에서도 그러하다.
그러나 윈도 사용자들은 기본적으로 ‘\r\n’을 사용하도록 되어있으므로, IDE나 편집기에서 혹은 Git에서 설정을 변경해주지 않는 이상 줄바꿈 문자가 ‘\r\n’이 된다. 이로 인해 다양한 OS를 사용하는 개발자들이 함께 같은 프로젝트에서 개발을 하다보면 내가 작성한 코드에 누군가 ‘\r\n’을 집어넣어 심란해지는 일이 종종 있다. 누가 집어넣었는지 찾아내고 싶지만 (( 물론 누군지 찾아내서 그의 편집기나 Git 설정을 올바르게 바로잡아주려는 것이다. )) 이미 들어간지 며칠 지나서 커밋이 수십개나 쌓였다면 찾아내기가 쉽지는 않다.
작년에 이런 문제를 실제로 자주 겪었었고, 지난번 포스팅에서 소개했던 git bisect
를 이용해 해결했었다.
우선 아래와 같이 간단히 \r\n을 검출하는 파이썬 스크립트 eol.py 를 만들었다.
#/bin/env python import sys if sys.stdin.readlines()[0][-2:] == 'rn': exit(1)
그리고 위의 스크립트를 이용해 원하는 파일에 대해 줄바꿈 문자를 검사하는 쉘스크립트 test.sh를 만들었다. (( 이걸 굳이 두 개의 스크립트로 쪼갠 것은, 난 기본적으로 파이썬이 익숙해서 왠만하면 파이썬으로 만들긴 하지만, 이 사례에서는 혹시 대상 파일이 옮겨졌더라도 잘 동작하게 하기 위해 쉘의 **
이 필요했기 때문이다. ))
#!/bin/sh cat **/RepositoryController.java | python eol.py exit $?
그럼 이제 test.sh 를 실행하면 내가 검사하고자 하는 RepositoryController.java 파일에 eol 문자가 ‘\r\n’인 경우에는 1, 아니면 0이 반환될 것이다.
이제 아래와 같이 실행하면 ‘\r\n’이 처음으로 잘못 들어간 커밋이 무엇인지 알려준다. 엔 문제가 없었던(‘\r\n’이 없었던) 커밋을 적어주면 된다.
git bisect bad
git bisect good <good-commit>
git bisect run sh test.sh
ps. git log -G 로 간단히 잘못된 줄바꿈 문자를 찾아내는 것도 가능하지 않을까 싶은데 방법을 잘 모르겠다.