- 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 명령은 아무 출력도 내지 않음