줄 끝 정보
키보드에서 return 키를 누를 때마다 줄 끝이라는 보이지 않는 문자가 삽입됩니다. 운영 체제마다 줄 끝을 다르게 처리합니다.
Git 및 GitHub Enterprise Server(을)를 사용하여 프로젝트를 협업할 때, 예를 들어 Windows 컴퓨터에서 작업 중이고 협력자가 macOS에서 변경한 경우 Git에서 예기치 않은 결과가 발생할 수 있습니다.
줄 끝을 자동으로 처리하도록 Git을 구성하면 다른 운영 체제를 사용하는 사람과 효과적으로 협업할 수 있습니다.
줄 끝의 전역 설정
git config core.autocrlf
명령은 Git에서 줄 끝 처리 방법을 변경하는 데 사용됩니다. 단일 인수를 사용합니다.
macOS에서는 구성에 input
(을)를 전달하기만 하면 됩니다. 예시:
$ git config --global core.autocrlf input
# Configure Git to ensure line endings in files you checkout are correct for macOS
Windows에서는 구성에 true
(을)를 전달하기만 하면 됩니다. 예시:
$ git config --global core.autocrlf true
# Configure Git to ensure line endings in files you checkout are correct for Windows.
# For compatibility, line endings are converted to Unix style when you commit files.
Linux에서는 구성에 input
을 전달하기만 하면 됩니다. 예시:
$ git config --global core.autocrlf input
# Configure Git to ensure line endings in files you checkout are correct for Linux
리포지토리별 설정
필요에 따라 .gitattributes
파일을 구성하여 Git이 특정 리포지토리에서 줄 끝을 읽는 방법을 관리할 수 있습니다. 이 파일을 리포지토리에 커밋하면 모든 리포지토리 기여자의 core.autocrlf
설정이 재정의됩니다. 이렇게 하면 Git 설정 및 환경에 관계없이 모든 사용자에게 일관된 동작이 보장됩니다.
리포지토리의 루트에 .gitattributes
파일을 만들고 다른 파일처럼 커밋해야 합니다.
.gitattributes
파일은 두 개의 열이 있는 테이블처럼 보입니다.
- 왼쪽에는 Git에서 일치시킬 파일 이름이 있습니다.
- 오른쪽에는 Git에서 해당 파일에 사용해야 하는 줄 끝 구성이 있습니다.
예시
.gitattributes
파일의 예는 다음과 같습니다. 리포지토리 템플릿으로 사용할 수 있습니다.
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
*.c text
*.h text
# Declare files that will always have CRLF line endings on checkout.
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
파일이 공백으로 구분되어 일치된 다음(*.c
, *.sln
, *.png
), 설정이 지정됩니다(text
, text eol=crlf
, binary
). 아래에서 몇 가지 가능한 설정을 살펴보겠습니다.
-
text=auto
Git은 가장 좋다고 생각하는 방식으로 파일을 처리합니다. 좋은 기본 옵션입니다. -
text eol=crlf
Git은 체크 아웃 시 항상 줄 끝을CRLF
(으)로 변환합니다. OSX 또는 Linux에서도CRLF
끝을 유지해야 하는 파일에 사용해야 합니다. -
text eol=lf
Git은 체크 아웃 시 항상 줄 끝을LF
(으)로 변환합니다. Windows에서도 LF 끝을 유지해야 하는 파일에 사용해야 합니다. -
binary
Git은 지정된 파일이 텍스트가 아니라는 것을 인식하므로 변경하려고 하면 안 됩니다.binary
설정은-text -diff
의 별칭이기도 합니다.
줄 끝을 변경한 후 리포지토리 새로 고침
core.autocrlf
옵션을 설정하거나 .gitattributes
파일을 커밋하면, Git에서 새 구성과 일치하도록 줄 끝을 자동으로 변경합니다. 수정하지 않은 파일의 변경 내용을 Git에서 보고할 수 있습니다.
리포지토리의 모든 줄 끝을 새 구성과 일치하도록 하려면, Git을 사용하여 파일을 백업한 다음 모든 파일을 제거하고 복원하여 줄 끝을 정규화합니다.
-
변경 내용을 추가하거나 커밋하기 전에 Git이 구성을 올바르게 적용했는지 확인합니다. 예를 들어 Git은 리포지토리의 파일이 텍스트 또는 이진 파일인지 여부를 자동으로 결정합니다. 리포지토리에서 이진 파일이 손상되는 것을 방지하려면
.gitattributes
에 파일을 명시적으로 이진 표시하는 것이 좋습니다. 자세한 내용은 Git 설명서의 경로마다 특성 정의 - gitattributes를 참조하세요. -
리포지토리의 파일에 대한 로컬 변경 내용의 손실을 방지하려면, 다음 명령을 실행하여 미해결 변경 내용을 추가하고 커밋합니다.
Shell git add . -u git commit -m "Saving files before refreshing line endings"
git add . -u git commit -m "Saving files before refreshing line endings"
-
새 구성을 반영하도록 현재 분기의 모든 파일을 업데이트하려면 다음 명령을 실행합니다.
Shell git rm -rf --cached . git reset --hard HEAD
git rm -rf --cached . git reset --hard HEAD
-
재작성된 정규화된 파일을 표시하려면 다음 명령을 실행합니다.
Shell git status
git status
-
필요에 따라 리포지토리에서 미해결 변경 내용을 커밋하려면 다음 명령을 실행합니다.
Shell git commit -m "Normalize all the line endings"
git commit -m "Normalize all the line endings"
추가 참고 자료
- Pro Git 설명서의 Git 사용자 지정 - Git 특성
- Git 기본 페이지의 git-config
- Pro Git 설명서의 시작 - 첫 번째 Git 설정
- 줄 끝에 유의(Tim Clem)