본문 바로가기
git (협업 툴) 사용법 정리

Git : .gitignore 문법 및 사용법 정리 (추가: '!' 패턴 동작 안될때 해결법)

by 번데기 개발자 2022. 12. 16.
반응형

 

.gitignore 란?

 

git을 사용하면서 우리는 용량이 큰 파일이나 업로드해서는 안 되는 key파일 등등을 무시하고 소스코드를 업로드할 수 있도록 선언할 수 있습니다.

 

이는 .gitignore 라는 파일을 이용하면 되는데요, 단순하게 .gitignore 라는 파일을 작성하고 일련의 규칙에 따라 제외할 파일들의 목록들을 .gitignore 파일에 작성해주면 됩니다.

 

 

gitignore.io

Create useful .gitignore files for your project

www.toptal.com

위 사이트를 통해서 원하는 개발 플랫폼에 따라 .gitignore파일을 쉽게 만들고 적용할 수 있습니다.

 

 

.gitignore 문법 

 

.gitignore 를 제대로 사용하기 위해 문법을 한번 살펴보도록 하겠습니다. 

 

.gitignore 파일은 Glob 패턴에 따라 작성이 되는데요,  (glob 패턴  => https://www.daleseo.com/glob-patterns/

 

Glob 패턴은 와일드 카드 문자를 사용하여 일정한 패턴을 가진 파일 이름을 지정하기 위한 패턴이며, 정규표현식과 유사한 문법들이 많기 때문에 이해하는데 크게 어렵지는 않습니다.

 

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

# .js 파일들은 모두 무시되지만, test.js만은 무시하지 않음
!test.js

# 현재 디렉토리에 있는 /test.js파일은 무시되지만,
# subDir/test.js 같이 특정 디렉토리 하위에 있는 test.js는 무시되지 않음
/test.js

# node_modules/ 디렉토리에 있는 모든 파일을 무시
node_modules/

# src/ 하위의 .js파일만 무시
src/*.js

# src/ 하위에 존재하는 모든 디렉토리의 .txt 파일을 무시
src/**/*.txt

# 현재 디렉토리와 그 하위 디렉토리 내에 존재하는 모든 .js 파일을 무시
/**/*.js

# 현재 디렉토리 내에 존재하는 모든 .js .ts 파일 무시
/*.{js, ts}

# 현재 디렉토리 내에 있는 ex1.js ex2.js ex3.js 파일 무시
/ex[1-3].js

 

 

.gitignore 문법 중 난해했던 부분

 

* 패턴과  ** 패턴의 차이

 

* 는 현재 경로(/) 안에서 문자열 비교를 위해 사용됩니다.

ex) /bbb/*.js 는 /bbb 폴더 안에 있는 모든 js 파일과 매칭됩니다.

 

**는 디렉토리 경로 상에서 전체 경로를 표현하기 위해 사용됩니다.

ex) /test/** 라고 하면 /test 아래에 있는 모든 것들을 의미합니다.

ex) /test/**/foo/ 라고 하면  /test 하위의 여러 디렉토리를 거쳐 발견된 foo 디렉토리에 매칭됩니다.
    (test/foo , /test/a/foo, /test/test/foo 등등)

 

 

'!' 패턴을 이용하여 .gitignore로 무시된 파일을 다시 include 할 때 연산자가 동작하지 않는 문제

 

보통 폴더에 있는 특정 파일을 제외하고 모두 git에서 무시되도록 하기 위해  '/' '!' 를 이용하여 경로를 추가한 뒤 (/) 예외를 처리(!) 하도록 .gitignore 를 작성하게 됩니다.

 

하지만 아래처럼 .gitignore 파일을 작성하면 올바르게 '!' 패턴이 적용되지 않습니다.

 

/test/
!/test/a.txt
!/test/b.txt

ex) a.txt, b.txt 는 여전히 무시됩니다. 즉 '!' 패턴이 적용되지 않습니다.

 

이를 해결하기 위해서는 '/' 를 이용하는 것이 아닌 '**' 를 이용하여 .gitignore 파일을 작성하여야 올바르게 '!' 패턴이 적용됩니다.

 

/test/**
!/test/a.txt
!/test/b.txt

ex) a.txt, b.txt 는 .gitignore로 부터 무시되지 않습니다.

 

 

마무리

 

오늘은 .gitignore 에 대해서 한번 정리를 해보았는데요, 발단은 '!' 패턴이 계속 동작하지 않아서 왜 안되는지 찾다가 이참에 .gitignore에 대해서도 조금 디테일하게 정리를 해보자 하게되어 포스팅까지 남기게 되었습니다.

 

앞으로도 git 관련한 포스팅을 꾸준히 업로드할 예정입니다. 

 

감사합니다. 

 

 

 

참고 

 

.gitignore 파일 다루기 - https://kyu9341.github.io/Git/2020/08/23/git_gitignore/

 

.gitignore 문법 및 규칙 정리 - https://sh-hyun.tistory.com/22

 

.gitignore로 무시된 디렉토리 안의 특정 파일만 추가하는 방법 - https://hyeonseok.com/blog/797

 

반응형