Git 무시
Git은 작업 복사본의 모든 파일을 다음 세 가지 중 하나로 간주합니다.
1. 추적됨 - 이전에 스테이징되었거나 커밋된 파일
2. 추적되지 않음 - 스테이징 또는 커밋되지 않은 파일
3. 무시됨 - Git이 명시적으로 무시하도록 지시한 파일
무시된 파일은 일반적으로 리포지토리 소스에서 파생되거나 커밋되지 않아야 하는 빌드 아티팩트 및 시스템 생성 파일입니다. 일반적인 예제는 다음과 같습니다.
- 종속성 캐시(예:
/node_modules
또는/packages
콘텐츠) - 컴파일된 코드(예:
.o
,.pyc
,.class
파일) - 빌드 출력 디렉터리(예:
/bin
,/out
,/target
) - 런타임에 생성된 파일(예:
.log
,.lock
,.tmp
) - 숨겨진 시스템 파일(예:
.DS_Store
또는Thumbs.db
) - 개인 IDE 구성 파일(예:
.idea/workspace.xml
)
무시된 파일은 .gitignore
라는 이름의 특수 파일에서 추적하며 이 파일은 리포지토리의 루트에서 체크인합니다. 명시적인 git 무시 명령은 없습니다. 대신 무시할 새 파일이 있는 경우 .gitignore
파일을 직접 편집하고 커밋해야 합니다. .gitignore
파일은 리포지토리 파일 이름과 비교하여 무시 여부를 결정하는 패턴을 포함합니다.
이 문서에서는 다음에 대해 다룹니다.
Git 무시 패턴
.gitignore
은 glob 패턴을 사용하여 파일 이름과 일치시킵니다. 다음과 같이 다양한 기호를 사용하여 패턴을 구성할 수 있습니다.
패턴 | 일치하는 예제 | 설명* |
---|---|---|
| 일치하는 예제 | 설명* 패턴 앞에 별표 두 개를 붙이면 리포지토리 어디서나 디렉터리와 일치시킬 수 있습니다. |
| 일치하는 예제 | 설명* 별표 두 개를 사용하여 파일 이름과 상위 디렉터리 이름을 기준으로 파일을 일치시킬 수도 있습니다. |
| 일치하는 예제 | 설명* 별표는 0개 이상의 문자와 일치시키는 와일드카드입니다. |
| 일치하는 예제 | 설명* 패턴 앞에 느낌표를 붙이면 패턴의 부정이 됩니다. 파일이 패턴과 일치하는 동시에 파일의 뒷부분에 정의된 부정 패턴과 일치하는 경우 무시되지 않습니다. |
| 일치하는 예제 | 설명* 부정 패턴 뒤에 정의된 패턴은 이전에 부정된 파일을 모두 다시 무시합니다. |
| 일치하는 예제 | 설명* 슬래시를 앞에 추가하면 리포지토리 루트에 있는 파일만 일치시킵니다. |
| 일치하는 예제 | 설명* 물음표는 정확히 한 문자와 일치시킵니다. |
| 일치하는 예제 | 설명* 대괄호를 사용하여 지정된 범위의 단일 문자를 일치시킬 수도 있습니다. |
| 일치하는 예제 | 설명* 대괄호는 지정된 집합의 단일 문자 형태와 일치시킵니다. |
| 일치하는 예제 | 설명* 느낌표는 지정된 집합의 문자를 제외한 모든 문자를 일치시키는 데 사용할 수 있습니다. |
| 일치하는 예제 | 설명* 범위는 숫자 또는 알파벳일 수 있습니다. |
| 일치하는 예제 | 설명* 슬래시를 추가하지 않으면 패턴이 두 파일 및 같은 이름의 디렉터리 내용과 일치시킵니다. 왼쪽에 있는 일치하는 예제에서는 logs라는 디렉터리 및 파일이 모두 무시됩니다 |
| 일치하는 예제 | 설명* 슬래시를 추가하면 패턴이 디렉터리임을 나타냅니다. 모든 파일 및 하위 디렉터리를 포함하여 이름이 일치하는 리포지토리에 있는 모든 디렉터리의 전체 콘텐츠가 무시됩니다 |
| 일치하는 예제 | 설명* 특이한 점이 있습니다. 왼쪽에 있는 예제에서 |
| 일치하는 예제 | 설명* 별표 두 개는 0개 이상의 디렉터리와 일치시킵니다. |
| 일치하는 예제 | 설명* 와일드카드는 디렉터리 이름에도 사용할 수 있습니다. |
| 일치하는 예제 | 설명* 특정 디렉터리의 파일을 지정하는 패턴은 리포지토리 루트에 상대적입니다. (원하는 경우 슬래시를 앞에 추가할 수 있지만 특별한 차이는 없습니다.) |
** 이 설명은 .gitignore 파일이 규칙과 마찬가지로 리포지토리의 최상위 디렉터리에 있다고 가정합니다. 리포지토리에 여러 개의 .gitignore 가 있는 경우 단순히 마음속으로 "리포지토리 루트"를 ".gitignore 파일이 들어 있는 디렉터리"로 대체할 수 있습니다(팀을 위해 이 파일을 통합하는 것을 고려하세요).
이 문자 외에도 다음과 같이 #를 사용하여 .gitignore
파일에 코멘트를 추가할 수 있습니다.
# ignore all logs
*.log
.gitignore
패턴 문자를 포함하는 파일 또는 디렉터리가 있는 경우 다음과 같이 /를 사용하여 .gitignore 패턴 문자를 이스케이프할 수 있습니다.
# ignore the file literally named foo[01].txt
foo\[01\].txt
관련 자료
Git 브랜치
솔루션 보기
Bitbucket Cloud에서 Git에 대해 알아보기
Git 무시 규칙은 리포지토리의 루트에 있는 .gitignore
파일에 일반적으로 정의되어 있습니다. 그러나 리포지토리의 다른 디렉터리에 있는 여러 개의 .gitignore
파일을 정의할 수도 있습니다. 특정 .gitignore
파일의 각 패턴은 해당 파일을 포함하는 디렉터리를 기준으로 테스트합니다. 그러나 규칙이자 가장 간단한 접근 방식은 루트에 있는 단일 .gitignore
파일을 정의하는 것입니다. .gitignore
파일이 체크인되면 리포지토리에 있는 다른 파일과 마찬가지로 버전을 지정하여 푸시하는 경우 팀원과 공유합니다. 일반적으로 .gitignore
에는 리포지토리의 다른 사용자에게 도움이 되는 패턴만 포함해야 합니다.
개인 Git 무시 규칙
또한 .git/info/exclude
의 특수 파일에서 특정 리포지토리의 개인 무시 패턴을 정의할 수도 있습니다. 이 패턴은 버전을 지정하지 않고 리포지토리와 함께 배포되지 않으므로 자신에게만 도움이 되는 패턴을 포함하기에 적합한 장소입니다. 예를 들어, 사용자 지정 로깅 설정이나 리포지토리 작업 디렉터리에 파일을 생성하는 특수 개발 도구가 있는 경우, .git/info/exclude
에 추가하여 실수로 리포지토리에 커밋되지 않도록 방지할 수 있습니다.
전역 Git 무시 규칙
또한 Git core.excludesFile
속성을 설정하여 로컬 시스템에서 모든 리포지토리의 전역 Git 무시 패턴을 정의할 수 있습니다. 이 파일은 사용자가 직접 만들어야 합니다. 전역 .gitignore
파일을 어디에 놓아야 할지 잘 모르는 경우, 홈 디렉터리는 잘못된 선택이 아니며, 나중에 쉽게 찾을 수 있습니다. 파일을 만든 후에는 다음과 같이 git config
를 사용하여 파일의 위치를 구성해야 합니다.
$ touch ~/.gitignore
$ git config --global core.excludesFile ~/.gitignore
프로젝트마다 서로 다른 파일 형식이 관련되므로 어떤 패턴을 전역적으로 무시할지 선택하는 경우 주의해야 합니다. 특수 운영 체제 파일(예: .DS_Store
및 thumbs.db
) 또는 일부 개발자 도구에서 만든 임시 파일은 전역적으로 무시할 수 있는 일반적인 대상입니다.
이전에 커밋된 파일 무시
이전에 커밋한 파일을 무시하려면 리포지토리 파일을 삭제한 다음 해당 파일의 .gitignore
규칙을 추가해야 합니다. git rm
및 --cached
옵션을 함께 사용하면 파일이 리포지토리에서 삭제되지만 작업 디렉터리에는 무시된 파일로 남습니다.
$ echo debug.log >> .gitignore
$ git rm --cached debug.log
rm 'debug.log'
$ git commit -m "Start ignoring debug.log"
리포지토리 및 로컬 파일 시스템 모두에서 파일을 삭제하려면 --cached
옵션을 생략할 수 있습니다.
무시된 파일 커밋
-f
(또는 --force
) 옵션을 git add
와 함께 사용하여 무시된 파일을 리포지토리로 강제로 커밋할 수 있습니다.
$ cat .gitignore
*.log
$ git add -f debug.log
$ git commit -m "Force adding debug.log"
일반적인 패턴(예: *.log
)이 정의되어 있지만 특정 파일을 커밋하려는 경우 이 방법을 고려할 수 있습니다. 그러나 일반적인 규칙에 대한 예외를 정의하는 것이 더 나은 해결책입니다.
$ echo !debug.log >> .gitignore
$ cat .gitignore
*.log
!debug.log
$ git add debug.log
$ git commit -m "Adding debug.log"
이 접근 방식은 팀원에게 더 분명하며 덜 혼란스럽습니다.
무시된 파일 스태시
git stash는 로컬 변경 사항을 일시적으로 보관하고 되돌리는 강력한 Git 기능으로, 나중에 다시 적용할 수 있습니다. 예상대로 git stash
는 기본적으로 무시된 파일을 무시하고 Git에서 추적하는 파일의 변경 사항만 저장합니다. 그러나 git stash with the --all option을 호출하여 무시되거나 추적되지 않은 파일의 변경 사항을 저장할 수도 있습니다.
.gitignore 파일 디버깅
.gitignore
패턴이 복잡하거나 여러 개의 .gitignore
파일에 패턴이 분산된 경우, 특정 파일이 무시되는 이유를 추적하기 어려울 수 있습니다. 다음과 같이 git check-ignore
명령을 -v
(또는 --verbose
) 옵션과 함께 사용하여 특정 파일을 무시하는 패턴을 확인할 수 있습니다.
$ git check-ignore -v debug.log
.gitignore:3:*.log debug.log
출력은 다음과 같습니다.
<file containing the pattern> : <line number of the pattern> : <pattern> <file name>
원하는 경우 여러 파일 이름을 git check-ignore
에 전달할 수 있으며 이름 자체는 리포지토리에 있는 파일과 일치할 필요도 없습니다.
이 문서 공유
다음 토픽
여러분께 도움을 드릴 자료를 추천합니다.
이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.