git add .
명령어를 사용하면 불필요한 파일까지 스테이징되고, 그렇다고 하나씩 추가하기에는 너무 번거롭다. 이럴 때 .gitignore
파일을 통해 제외할 대상을 지정하면 git add .
명령어를 사용하면서도 필요한 파일들만 추적할 수 있다.
.gitignore
파일의 위치는 프로젝트의 최상위 디렉토리이다. .git
디렉토리의 위치와 같다.
스프링 부트 이니셜라이저를 통해 프로젝트를 생성했다면 .gitignore
가 포함되어 있다. (파일명 앞의 .
은 숨김을 의미한다. MacOS에서는 cmd + shift + .
을 통해 숨김 파일 및 디렉토리 보기를 on/off 할 수 있다.)
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
여기에 있는 몇 가지만 예를 들어 보면 :
.gradle
: ".gradle"이라는 이름을 가지는 파일, 디렉토리와 그 하위의 모든 파일과 디렉토리를 가리킨다.build/
: "build"라는 이름을 가지는 디렉토리와 그 하위의 모든 파일과 디렉토리를 가리킨다. 이름 뒤에 /
를 붙으면 디렉토리를 뜻한다.!gradle/wrapper/gradle-wrapper.jar
: gradle/wrapper/
디렉토리에 있는 radle-wrapper.jar
는 대상에서 제외한다. !
표시가 앞에 붙으면 예외 케이스를 지정하는 것이다. *.iws
: "iws" 확장자를 가진 모든 파일을 가리킨다./nbbuild/
: 이름 앞에 /
가 붙으면 루트 디렉토리에 위치한 대상만 가리킨다. 즉 이 경우는 루트 디렉토리에 있는 "nbbuild" 디렉토리를 기리킨다.더 많은 설명은 🔗 [W3School] Git Ignore and .gitignore 참고
그런데 기본으로 생성된 .gitignore
를 살펴보니, 나는 MacOS를 사용하기 때문에 .DS_Store
라는 불필요한 시스템 파일이 자동으로 생성되는데 이 파일은 여기에 포함되어있지 않았다.
또한 내가 놓칠 수 있는 항목이 있을 수 있기 때문에 검색을 하다가 🔗 gitignore.io 라는 사이트를 발견했다. 여기에서 운영체제, 개발언어, IDE를 선택하면 자동으로 .gitignore
파일을 작성해준다.
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
...
MacOS
, Java
, IntelliJ
를 선택하고 생성한 파일을 보면 위와 같이 MacOS 환경에서 생성되는 파일들도 포함하고 있다. (그 외에 많은 항목들도 있는데 잘 모르겠지만 사이트를 믿기로 했다. 잘못 포함되는 것이 문제지 포함이 안된 건 나중에 추가하면 되니까~😉)
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
...
이 사이트에서 생성해준 파일을 보면 위와 같이 .idea/
디렉토리의 많은 파일들을 대상으로 지정하고 있는데(위 예시는 일부), 이미 스프링 부트의 파일에서는 .idea
를 통채로 지정하고 있기에 나는 사이트가 만들어준 파일에서 모든 .idea
및 그 하위의 것들은 삭제했다.
### Java ###
# Compiled class file
*.class
자바의 바이트코드 파일도 제외하고 있는데 이미 스트링 부트가 컴파일 디렉토리인 out/
을 지정하고 있기에 이 항목도 중복이라 생각해 삭제했다.
나는 application.yml
에서 DB 연결 정보 등 민감한 정보를 담기 위해 application-sensitive.yml
을 분리했다. 이 파일은 퍼블릭 리포지토리에 업로드돼서는 안 되기 때문에 제외할 것이다.
spring:
datasource:
url: jdbc:h2:tcp://...
username: sa
password: sa
application.yml
에서는 spring.profiles.active: sensitive
설정을 추가해 분리된 설정 파일을 연결해야 한다. (스프링 부트는 "application-" 뒤의 이름을 별칭으로 자동 인식한다.)application-sensitive.yml
application-sensitive.properties
.gitignore
에 위 항목을 추가해준다. 나는 YAML 파일을 사용하지만 만일을 위해 application-sensitive.properties
도 추가했다.
이제 git add .
을 한 뒤 git status
명령을 통해 원하는 파일만 잘 스테이징 되었는지 확인한다.
$ git reset HEAD <file>
만약 잘못 올라간 파일이 있다면 위 명령을 통해 스테이징을 해제하고 .gitignore
파일을 수정한다. (이전 포스팅 참고 : 🔗 마지막 커밋 이후 변경사항 폐기하기)