로컬 테스트용 인프라를 docker compose 를 이용하여 구성하는데, 이때 container 가 기동할 때 초기화하는 스크립트 파일을 bash shell script 로 만드는 경우가 있습니다. linux 나 mac 에서 개발하는 경우는 os 자체의 eol 설정이 lf 이므로 문제가 발생하지 않는데, 윈도우의 경우 eol 문자를 cr + lf 로 변환하기 때문에 bash shell script 같은 파일은 문제가 되는 경우가 있습니다.
해결 방법은 .gitattributes 파일에 원하는 파일에 대해서 eol 문자를 lf 로 고정하는 방법이 있어 적어봅니다.
일단 저는 bash shell script 는 모두 파일 확장자를 .sh 로 사용합니다. 이런 규칙성을 가지는 파일은 모두 eol 을 변환없이 lf 로 고정하고 싶다는 설정의 .gitattributes 파일에 선언하면 됩니다.
아래는 예시입니다.
#
# Configure line ending normalisation for this repository.
# See http://schacon.github.io/git/gitattributes.html for more information.
#
# Also each developer should configure the old style normalisation on her workstation
# (see http://timclem.wordpress.com/2012/03/01/mind-the-end-of-your-line/):
#
# Windows user should use: git config --global core.autocrlf = true
# Unix/Linux users should use: git config --global core.autocrlf = input
#
# Auto detect text files and perform LF normalization
* text=auto
# Shell scripts require LF
*.sh text eol=lf
# Batch scripts require CRLF
*.bat text eol=crlf
이렇게 선언하면 .sh 로 끝나는 파일은 eol 문자를 lf 로 고정하여 사용합니다.
위 주석에 보시는 바와 같이, 윈도우 사용자는 git config --global core.autocrlf = true 로 설정해야 한다고 되어 있습니다.
이렇게 해야 윈도우에서 텍스트 파일을 여는 경우 윈도우에서 표현가능한 개행문자(cr + lf) 로 자동 변환됩니다. 다시 git remote 에 push 할 때는 자동으로 개행문자를 lf 로 변환해서 넣어줍니다.
위와 같은 과정이 필요한 이유는 각 OS 별로 개행문자가 상이하기 때문입니다.
#
# 이 저장소에 대한 줄 끝 정규화를 구성합니다.
# 자세한 내용은 http://schacon.github.io/git/gitattributes.html을 참조하세요.
#
# 또한 각 개발자는 자신의 워크스테이션에서 이전 스타일 정규화를 구성해야 합니다.
# (http://timclem.wordpress.com/2012/03/01/mind-the-end-of-your-line/ 참조):
#
# Windows 사용자는 다음을 사용해야 합니다: git config --global core.autocrlf = true
# Unix/Linux 사용자는 다음을 사용해야 합니다: git config --global core.autocrlf = input
#
# 텍스트 파일을 자동으로 감지하고 LF 정규화를 수행합니다.
* 텍스트=자동
*.txt 텍스트
*.java 텍스트 diff=java
*.xml 텍스트 차이=xml
# 쉘 스크립트에는 LF가 필요합니다
*.sh 텍스트 eol=lf
# 배치 스크립트에는 CRLF가 필요합니다
*.bat 텍스트 eol=crlf