Skip to main content

줄 끝을 처리하도록 Git 구성

diff에서의 문제를 방지하기 위해 줄 끝을 제대로 처리하도록 Git을 구성할 수 있습니다.

Platform navigation

줄 끝 정보

키보드에서 return 키를 누를 때마다 줄 끝이라는 보이지 않는 문자가 삽입됩니다. 운영 체제마다 줄 끝을 다르게 처리합니다.

Git 및 GitHub Enterprise Cloud(을)를 사용하여 프로젝트를 협업할 때, 예를 들어 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을 사용하여 파일을 백업한 다음 모든 파일을 제거하고 복원하여 줄 끝을 정규화합니다.

  1. 변경 내용을 추가하거나 커밋하기 전에 Git이 구성을 올바르게 적용했는지 확인합니다. 예를 들어 Git은 리포지토리의 파일이 텍스트 또는 이진 파일인지 여부를 자동으로 결정합니다. 리포지토리에서 이진 파일이 손상되는 것을 방지하려면 .gitattributes에 파일을 명시적으로 이진 표시하는 것이 좋습니다. 자세한 내용은 Git 설명서의 경로마다 특성 정의 - gitattributes를 참조하세요.

  2. 리포지토리의 파일에 대한 로컬 변경 내용의 손실을 방지하려면, 다음 명령을 실행하여 미해결 변경 내용을 추가하고 커밋합니다.

    Shell
    git add . -u
    git commit -m "Saving files before refreshing line endings"
    
  3. 새 구성을 반영하도록 현재 분기의 모든 파일을 업데이트하려면 다음 명령을 실행합니다.

    Shell
    git rm -rf --cached .
    git reset --hard HEAD
    
  4. 재작성된 정규화된 파일을 표시하려면 다음 명령을 실행합니다.

    Shell
    git status
    
  5. 필요에 따라 리포지토리에서 미해결 변경 내용을 커밋하려면 다음 명령을 실행합니다.

    Shell
    git commit -m "Normalize all the line endings"
    

추가 참고 자료