PS C:\-\-> git add .
warning: LF will be replaced by CRLF in .gitattributes.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in .gitignore.
The file will have its original line endings in your working directory
warning: LF will be replaced by CRLF in build.gradle.
The file will have its original line endings in your working directory
초기 설정을 전체 add 하고 git에 commit push 하기 위해 나타난 warning 문제
warning: LF will be replaced by CRLF in [file]
특정 파일의 LF 타입이 CRLF로 변경될 것이라는 의미이다.
여기서 나는 두가지 의문점이 생겼다.
LF: 줄 바꿈을 나타내는 단일 문자
유니코드 코드 포인트: 0x0A (십진수로는 10)
사용 환경: 주로 Unix/Linux 및 macOS (OS X부터) 시스템에서 사용됨.
동작: 줄 끝으로 이동하는 기능만을 수행함.
예를 들어, 텍스트 파일에서 줄을 바꿀 때 LF만 사용한다.
CRLF: 두 개의 문자가 결합된 형태
동작: CR로 커서를 맨 앞으로 이동하고, 그다음 LF로 줄을 바꿈.
즉, 줄 바꿈을 위해 두 문자를 모두 사용한다.
LF는 한 문자로 줄 바꿈을 처리하는 반면, CRLF는 두 문자(Carriage Return + Line Feed)로 줄 바꿈을 처리합니다.
Windows에서는 CRLF를 사용하고, Unix/Linux 및 macOS에서는 LF를 사용합니다.
줄 바꿈 형식 비교
시스템 줄 바꿈 형식
| | |
|------ |---------- | ------- |
|Unix/Linux| LF (Line Feed) |(0x0A)|
| Windows | CRLF (Carriage Return + Line Feed) | (0x0D 0x0A)
|macOS |LF (Line Feed)| (0x0A)|
Windows에서 작업하고 있고, 협업하는 상대방이 Unix/Linux 시스템을 사용하는 경우, 줄 바꿈 형식 차이로 인해 여러 가지 문제가 발생할 수 있다. Git은 기본적으로 CRLF(Windows의 줄 바꿈 형식)와 LF(Unix/Linux의 줄 바꿈 형식)을 구분하여 처리하는데, 이 설정을 제대로 하지 않으면 협업 시 불필요한 충돌이나 오류가 발생할 수 있다.
줄 바꿈 형식 차이가 발생하는 이유
Windows는 줄 바꿈을 CRLF(Carriage Return + Line Feed) 형식으로 저장하는 반면, Unix/Linux는 LF(Line Feed)만 사용한다.
Git은 서로 다른 시스템 간에 파일을 공유할 때, 줄 바꿈 형식에 차이가 생길 수 있다. 예를 들어, Windows에서 작성된 파일을 Unix/Linux에서 열면, 줄 바꿈 형식이 달라져서 불필요한 변경 사항으로 인식될 수 있다.
Git에서는 서로 다른 시스템 간의 협업을 위해 줄 바꿈 형식에 대한 문제를 자동으로 처리해준다.
예를 들어, Windows에서 작업한 파일을 Unix/Linux 시스템에서 열 때, Git이 자동으로 LF로 변환할 수 있도록 설정할 수 있고, Unix/Linux 시스템에서 열때 Git이 자동으로 CRLF로 변환해줄 수 있다.
Git 설정: core.autocrlf
Windows에서 작업할 때는 core.autocrlf=true로 설정하여, CRLF를 LF로 변환하도록 한다.
Unix/Linux에서 작업하는 경우, core.autocrlf=input으로 설정하여, LF만 유지된다. 이렇게 하면 Windows에서 CRLF를 LF로 변환하고, Unix/Linux에서는 LF 유지가 가능하다.
git config --global core.autocrlf true # Windows에서
git config --global core.autocrlf input # Unix/Linux/Mac에서
core.autocrlf 설정 종류:
core.autocrlf=true (Windows에서는 CRLF → LF로 자동 변환)
core.autocrlf=input (Unix/Linux에서는 LF 유지, Windows에서는 CRLF → LF로 변환)
core.autocrlf=false (Git이 자동 변환하지 않음)
.gitattributes 파일 사용
.gitattributes 파일을 사용하면, Git이 자동으로 줄 바꿈 형식을 처리하도록 설정할 수 있다. 예를 들어, 모든 텍스트 파일에 대해 자동으로 줄 바꿈을 처리하도록 설정하려면 .gitattributes 파일에 다음을 추가한다.
* text=auto
이렇게 하면 Git이 자동으로 줄 바꿈 형식을 조정하여, 서로 다른 시스템 간에 파일을 공유할 때 발생할 수 있는 문제를 방지할 수 있다.
줄 바꿈 형식이 일관되지 않으면, git add --renormalize . 명령어를 사용하여 줄 바꿈 형식을 일관되게 맞춘 후 다시 커밋할 수 있다.
git add --renormalize .
git commit -m "Normalize line endings"
협업 시 줄 바꿈 형식 차이를 해결하지 않으면, 불필요한 변경 사항, 충돌, 빌드 오류, 가독성 문제 등이 발생할 수 있다. 따라서, Git의 core.autocrlf 설정과 .gitattributes 파일을 사용하여 줄 바꿈 형식을 일관되게 관리하는 것이 중요하다. 이를 통해 협업 중 발생할 수 있는 여러 문제를 예방할 수 있다.