.gitignore 파일이란? 🧐
.gitignore 파일은 이름에서도 유추할 수 있듯이 git 원격 저장소에서 관리하지 않았으면 하는 파일들을 지정해두는 파일입니다. IDEA 관련 파일, gradle 관련 파일, 또는 공유되면 안되는 api 키가 들어있는 .env 파일이 그 예가 될 수 있습니다.
.gitignore 파일은 원격 저장소(repository) 최상위(root) 디렉토리에 존재하며, 이 파일 안에 지정된 파일들은 Staging Area에 올라가지 않기 때문에 git 으로 tracking 되지 않습니다. (git status를 했을때 보이지 않는다.)
정리하면,
- 로컬 환경 정보나 빌드 정보 등 원격 저장소에서 무시되어야 할 파일들을 지정해서 실수로 저장하지 않도록 해주는 파일
- 지정된 파일들에 대하여 git track 못하게 설정하는 역할
.gitignore 생성 방법 📂
.git 폴더가 있는 원격 저장소 최상위 디렉토리에 생성하면 되는데, 비주얼 스튜디오 코드 등 에디터를 사용하여 파일명을 .gitignore 로 정의하고 작성해주면 됩니다.
문법 (표준 Glob 패턴)
.gitignore 파일은 glob 패턴에 따라 작성해야 합니다. 정규 표현식과 유사한 부분이 있으며 아래 테이블에서 볼 수 있는 와일드 카드 문자(패턴)를 사용하여 git 에서 제외할 파일들을 지정합니다.
패턴 | 의미 |
---|---|
* | “/” 를 제외한 길이 0 이상의 모든 문자열 |
** | “/” 를 포함한 길이 0 이상의 모든 문자열 |
? | “/” 를 제외한 하나의 아무 문자 (빈 문자 x) |
[abc] | [ ] 안에 있는 각각의 문자 (a 또는 b 또는 c 중 하나) |
{a,b,c} | { } 안에 있는 , 로 구분된 각각의 문자열 |
[^abc] | [ ] 안에 있는 모든 각각의 문자들을 제외한 문자들 |
[a-z] | [ ] 안에서 “-” 사이에 있는 첫 문자와 마지막 문자 범위에 있는 모든 문자 (a-z, A-Z, 0-9 등) |
/ | 부터 시작하는 경로의 하위 디렉토리에 적용 x |
! | 부터 시작하는 것은 .gitignore에서 제외되며, git에서 tracking 된다. |
# | 주석처리 |
- 예시
# 확장자가 .class인 파일들은 모두 제외됩니다.
*.class
# "*.class"를 통해 제외되는 .class 파일들 중 "lib.class"만 제외되지 않습니다.
!lib.class
# "temp-"로 시작하는 모든 .json 파일들은 제외됩니다.
temp-*.json
# 현재 디렉토리에 있는 build.log 파일은 제외되지만, 그 아래에 있는 하위 디렉토리들은 제외되지 않습니다.
/build.log
# 폴더 뒤에 "/" 가 있으면, 해당 폴더 안에 있는 모든 파일들은 제외됩니다.
temp/
# src/ 하위의 .txt 파일만 제외됩니다.
src/*.txt
# src/ 하위에 존재하는 모든 디렉토리의 .txt 파일은 제외됩니다.
src/**/*.txt
# 현재 디렉토리 내에 존재하는 모든 .js .ts 파일들이 제외됩니다.
/*.{js,ts}
# 현재 디렉토리 내에 있는 ex1.js ex2.js ex3.js 파일들이 제외됩니다.
/ex[1-3].js
.gitignore 적용 방법
.gitignore 파일을 생성했어도 이미 원격 저장소에서 버전관리를 하고 있는 파일들은 .gitignore에서 지정해도 원래대로 계속해서 해당 파일들을 tracking 하기 때문에 수동으로 버전관리에서 제외시켜주어야 합니다.
# 현재 원격 저장소에 있는 cache를 모두 삭제합니다.
git rm -r --cached .
# .gitignore에서 지정한 파일들을 제외하고 다시 모든 파일들을 tracking 하도록 합니다.
git add .
# 커밋(commit)해줍니다.
git commit -m "reapply .gitignore"
# 푸쉬(push)해줍니다.
git push origin {브랜치 이름}
.gitignore 파일 자동 생성 사이트
정말 간편하게 https://www.gitignore.io/ 라는 사이트에서 원하는 .gitignore 파일을 생성할 수 있습니다.
아래처럼 현재 개발환경에 맞는 키워드들을 넣고,
생성을 누르면 이렇게 자동생성해줍니다.
# Created by https://www.toptal.com/developers/gitignore/api/java,intellij,macos
# Edit at https://www.toptal.com/developers/gitignore?templates=java,intellij,macos
### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### Intellij Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
# *.iml
# modules.xml
# .idea/misc.xml
# *.ipr
# Sonarlint plugin
# https://plugins.jetbrains.com/plugin/7973-sonarlint
.idea/**/sonarlint/
# SonarQube Plugin
# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
.idea/**/sonarIssues.xml
# Markdown Navigator plugin
# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
.idea/**/markdown-navigator.xml
.idea/**/markdown-navigator-enh.xml
.idea/**/markdown-navigator/
# Cache file creation bug
# See https://youtrack.jetbrains.com/issue/JBR-2257
.idea/$CACHE_FILE$
# CodeStream plugin
# https://plugins.jetbrains.com/plugin/12206-codestream
.idea/codestream.xml
# Azure Toolkit for IntelliJ plugin
# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
.idea/**/azureSettings.xml
### Java ###
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### macOS Patch ###
# iCloud generated files
*.icloud
# End of https://www.toptal.com/developers/gitignore/api/java,intellij,macos