Git에서 파일을 무시하는 방법은 .gitignore만이 아님

4 hours ago 1
  • Git의 파일 무시 규칙은 공유 범위에 따라 .gitignore, .git/info/exclude, ~/.config/git/ignore의 세 수준으로 나뉨
  • .gitignore는 저장소 코드와 함께 커밋되므로, 팀이나 프로젝트가 함께 적용해야 하는 공유 규칙을 두는 위치임
  • 개인 파일이나 로컬 작업용 파일처럼 저장소에는 필요하지만 팀 규칙으로 만들기 애매한 항목은 .git/info/exclude에 두는 편이 적합함
  • macOS의 .DS_Store처럼 모든 저장소에서 반복적으로 제외할 파일은 머신 전역 ignore 파일인 ~/.config/git/ignore에 넣을 수 있음
  • git check-ignore -v <파일명>은 어떤 규칙이 파일을 무시하는지 추적할 때 유용하며, 매칭되는 규칙이 없으면 출력이 없음

Git ignore 규칙의 적용 위치

  • Git은 파일 무시 규칙을 세 위치에서 처리할 수 있음
    • .gitignore
    • .git/info/exclude
    • ~/.config/git/ignore

.gitignore: 저장소에 커밋되는 공유 규칙

  • .gitignore는 무시할 파일명을 작성하는 일반적인 파일임
  • 나머지 코드와 함께 Git에 체크인
  • .gitignore 규칙에 매칭되는 파일은 git 명령 실행 시 고려되지 않음

.git/info/exclude: 저장소별 개인 규칙

  • exclude 파일은 모든 Git 저장소의 .git 디렉터리 안에 있음
  • 이 파일의 변경 사항은 Git에 체크인되지 않음
  • 새 Git 저장소에서는 보통 몇 줄의 주석이 들어 있음
  • 저장소별로만 무시하고 싶지만 .gitignore에는 넣고 싶지 않은 파일에 적합함
    • 예: 개인 워크플로에만 필요한 notes.txt를 저장소에 커밋하지 않고, 프로젝트의 .gitignore에도 추가하지 않으려면 .git/info/exclude에 notes.txt를 추가함

~/.config/git/ignore: 머신 전역 규칙

  • 전역 ignore 파일은 홈 디렉터리의 ~/.config/git/ignore에 있음
  • 여기에 추가한 파일명은 머신 수준에서 전역 무시
  • Git에 체크인되지 않으며 특정 저장소와 연결되지 않음
  • 컴퓨터의 모든 Git 저장소에서 무시하고 싶은 파일을 넣기 좋은 위치임
    • 예: macOS에서는 .DS_Store를 여기에 추가하는 것이 적합함

전역 ignore 파일 경로 바꾸기

  • 전역 ignore 파일은 다른 파일로 지정할 수 있음
  • 전역 Git ignore 파일을 .gitignore_global로 쓰려면 다음 명령을 실행함
git config --global core.excludesFile ~/.gitignore_global
  • 기본 설정으로 되돌리려면 다음 명령을 실행함
git config --global --unset core.excludesFile

어떤 규칙이 파일을 무시하는지 확인하기

  • git check-ignore -v <파일명>으로 특정 파일이 어떤 규칙에 의해 무시되는지 확인할 수 있음
  • .DS_Store가 어떻게 무시되는지 확인하려면 Git 저장소 안에서 다음 명령을 실행함
git check-ignore -v .DS_Store
  • 저장소의 .gitignore가 .DS_Store를 무시하는 경우 출력 예시는 다음과 같음
$ git check-ignore -v .DS_Store .gitignore:1:.DS_Store .DS_Store
  • 저장소의 .git/info/exclude가 .DS_Store를 무시하는 경우 출력 예시는 다음과 같음
$ git check-ignore -v .DS_Store .git/info/exclude:7:.DS_Store .DS_Store
  • 전역 ~/.config/git/ignore 파일이 .DS_Store를 무시하는 경우 출력 예시는 다음과 같음
$ git check-ignore -v .DS_Store /Users/nelson/.config/git/ignore:2:.DS_Store .DS_Store
  • 사용자 지정 전역 ignore 파일 .gitignore_global이 .DS_Store를 무시하는 경우 출력 예시는 다음과 같음
$ git check-ignore -v .DS_Store /Users/nelson/.gitignore_global:1:.DS_Store .DS_Store
  • 특정 파일을 무시하는 규칙이 없으면 git check-ignore -v 명령은 아무 출력도 내지 않음
Read Entire Article