본문 바로가기
기타/Git

[Git] .gitignore

by 코딩하는 랄로 2023. 11. 26.
728x90

.gitignore

프로젝트 파일을 관리하다보면, Git이 관리할 필요가 없는 파일들이 생기게 된다. 일반적으로는 로그 파일이나 빌드 시스템이 자동으로 생성하는 파일이 이러한 경우에 속하게 된다. 

 

Git이 관리하지 않아도 되는 파일을 설정하기 위해서는 Git은 .gitignore라는 파일을 이용하여 사용자가 지정한 파일을 Git이 무시할 수 있도록 설정할 수 있다. 아래의 예제는 .txt 파일은 무시하도록 .gitignore 파일을 생성한 것이다.

user@DESKTOP-UCJOAKJ MINGW64 /d/GitStudy (master)
$ echo '*.txt' > .gitignore

user@DESKTOP-UCJOAKJ MINGW64 /d/GitStudy (master)
$ cat .gitignore
*.txt

 

이제 정말 git이 txt 확장자를 가진 파일을 무시하는지 새로운 파일을 형성하여 status를 출력하여 보겠다.

user@DESKTOP-UCJOAKJ MINGW64 /d/GitStudy (master)
$ echo 'third file' > file3.txt

user@DESKTOP-UCJOAKJ MINGW64 /d/GitStudy (master)
$ git status
On branch master
nothing to commit, working tree clean

 

file3.txt를 추가하였지만, git은 txt 확장자를 가지는 파일은 무시하기 때문에 어떠한 status의 변화도 출력하지 않는다. git ignore에는 위에 예제처럼 txt 확장자 파일이외에도 o와 a 로 끝나는 빌드 시스템이 만들어내는 오브젝트와 아카이브 파일 확장자도 있고, ~로 끝나는 텍스트 편집기가 임시로 만들어 내는 파일 확장자 또한 존재한다. 

 

Git 이 무시하길 원하는 파일 확장자를 .gitignore 파일에만 명시하여 주기만 하면 된다. 이 작업은 보통 git directory를 생성한 시점에 해주는 것이 나중에 실수로 파일을 커밋하는 등의 골치 아픈 일을 피할 수 있다.

 

 

 

.gitignore 파일 입력 규칙

.gitignore 파일에도 아래와 같은 입력 규칙(패턴)이 존재한다. 

  • 아무것도 없는 라인, '#' 으로 시작하는 라인은 무시
  • 표준 Glob 패턴을 사용. 이는 프로젝트 전체에 적용
  • 슬래시(/)로 시작하면 하위 디렉토리에 적용되지 않음
  • 디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현
  • 느낌표(!)로 시작하는 패턴의 파일은 무시하지 않음

Glob 패턴은 정규표현식과 비슷한 것으로 쉘에서 많이 사용되는 패턴이다. 간단하게 위에 예제에서 사용한 *(애스터리스크)는 문자가 하나도 없거나 하나 이상을 뜻하기 때문에 txt 확장자를 가지는 모든 파일이라는 의미가 되는 것이다.

 

아래의 예제는, pro git에서 제공하고 있는 .gitignore 파일의 예이다.

# 확장자가 .a인 파일 무시
*.a

# 윗 라인에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않음
!lib.a

# 현재 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음 /TODO

# build/ 디렉토리에 있는 모든 파일은 무시
build/

# doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음
doc/*.txt

# doc 디렉토리 아래의 모든 .pdf 파일을 무시
doc/**/*.pdf

 

 

 

Glob 패턴

.gitignore 파일을 잘 사용하고 다른 사람이 설정한 파일을 이해하기 위해서는 Glob 패턴에 대해서도 알고 있어야 한다. Glob 패턴은 오래전부터 리눅스 운영체제에서 한 번에 여러개의 파일을 찾을 때 사용해온 패턴 매칭 기법으로 정규 표현식과 비슷하다고 생각하면 된다.

 

간단하게 Glob 패턴에서 자주 사용하는 기호에 대해서 몇가지 알아보겠다.

기호 설명
? 문자의 종류와 상관없이 정확히 한 글자와 매칭. ( a?는 ab, ac 등에만 매칭 )
* 길이와 상관없이 어떤 문자열(공백 포함)과도 부합. 디렉토리 구분자인 /(linux) or \(window)는 제외
** 0개 이상의 하위 디렉토리와 매칭 ( dir/**/file.txt => dir/a/file.txt, dir/a/b/file.txt 등 dir 아래의 모든 txt 파일 )
{} 동시에 여러 문자열을 매칭. ( *.{txt, exe} => txt와 exe 파일 모두 )
[] 대괄호안에 있는 문자열 중 하나와 매칭. ( [ab].txt => a.txt 또는 b.txt와 매칭 ) 
- 범위를 나타냄 ( [0-9] => 0에서 9 사이의 숫자 중 하나, [A-Z] : A에서 Z까지의 문자 중 하나 )

 

 

 

 

reference : git

728x90

'기타 > Git' 카테고리의 다른 글

[Git] Commit  (2) 2023.12.06
[Git] diff  (0) 2023.12.04
[Git] status --short  (1) 2023.11.26
[Git] add  (1) 2023.11.26
[Git] Git 개체 - Commit  (2) 2023.11.22