본문 바로가기

잡다/git

[Git 03] .gitignore 파일

 모든 파일이 Git의 관리 대상이 되어야 하는 것은 아니다. 단순한 로그 파일, 프로그램 빌드에 의한 부산물 등 프로그램 코드와 관련없는 파일들은 보통 일관성을 유지할 필요가 없으며, sql 서버에 대한 ID 및 비밀번호 정보를 기록해둔 파일은 오히려 Git을 통해 관리하면 보안상 문제를 발생시키므로 Git으로 관리해서는 안된다. 

 

 물론 파일을 그냥 untracked 상태로 두면 해당 파일에 대한 버전 관리를 수행할 일은 없다. 그러나 해당 파일에 대한 조회가 된다는 것 자체가 실수를 유발할 수 있으므로, 더 명확한 방법이 필요하다.

 

 Git은 위와 같은 상황에서 특정 파일을 완전히 무시하기 위해 제외하고 싶은 파일의 이름을 정의해두는 파일을 따로 두었는데, 이것이 .gitignore 파일이다.

 

.gitignore 사용법

규칙은 다음과 같다.

  1. .gitignore 파일은 반드시 최상위 폴더에 위치해야 한다(.git와 동일한 폴더).
  2. 아무것도 없는 라인이나 '#'으로 시작하는 라인은 무시한다.
  3. 표준 Glob 패턴을 사용하며, 프로젝트 전체에 적용된다(흔히 사용하는 정규표현식이 모두 적용된다).
  4. **으로 시작하면, 모든 폴더에 대해 일치한다.
  5. **으로 끝나면, 해당 폴더 내부 모든 파일에 대해 일치한다.
  6. '!' 으로 시작하는 폴더나 파일에 대해서는 무시하지 않는다.

 

# 01.테스트 폴더 내부에서 *.test.js 혹은 *.test.ts 꼴의 파일을 모두 무시
**/test/**/*.test.{js,ts}

# 02. .vscode 폴더를 무시
.vscode


# 03. target내 파일을 무시하되, debug/*.exe는 무시하지 않음

target/*			#target 내 모든 파일 무시
				#->target 자체는 무시 안하나, debug도 무시됨
target/debug/**/*		#target/debug 내 모든 파일 무시 
!target/debug			#target/debug 폴더 자체는 무시 안함 -> target/debug은 무시대상에서 제외
!/target/debug/*.exe		#target/debug 폴더에서 exe 파일은 무시 안함

 

도움되는 사이트

처음부터 끝까지 직접 .gitignore 파일을 작성하는 것은 분명 가능하다. 그렇지만 프로젝트마다 이런 행위를 반복하는 것은 매우 지루한 작업이다. 이런 작업에 대해 일정한 템플릿을 가지고 대신 해주는 사이트나 툴이 많이 존재한다. 여기서는 구글에 검색하면 가장 위에 위치한 사이트를 소개한다.

 

https://www.toptal.com/developers/gitignore

 

gitignore.io

Create useful .gitignore files for your project

www.toptal.com

 

 

사용법이 매우 간단하다. .gitignore을 적용하고 싶은 언어나 작업 환경을 작성하면 자동완성이 제공된다.

조건을 설정한 후 생성 버튼을 누르면 자동으로 파일 내부 선언을 제공한다.

 

 

결론

.gitignore 파일은 추적 대상에서 무시하고 싶은 파일을 glob 형태로 정의할 수 있는 Git에서 지원해주는 파일이다. 해당 파일은 직접 만들어 사용할 수도 있지만, 여러가지 툴을 이용하여 작성할 수도 있다.

 

사실 .gitignore 파일은 많은 프레임워크에서 기본적으로 제공해주는 파일 중 하나이기 때문에, 처음부터 끝까지 스스로 작성할 일은 딱히 많지 않다. 그렇기는 해도 기밀성 유지를 위해 자신의 컴퓨터에서만 사용해야 하는 파일같은 케이스를 무시하기 위해 어느 정도 사용법과 이에 대한 개념을 알고 있는 편이 좋겠다.

'잡다 > git' 카테고리의 다른 글

[Git 06] Alias  (0) 2021.10.31
[Git 05] remote  (0) 2021.10.30
[Git 04] commit  (0) 2021.10.30
[Git 02] 깃 저장소와 파일의 상태  (0) 2021.10.29
[Git 01] 버전관리 시스템  (0) 2021.10.29