より良い .gitignore を一瞬で手に入れる

f:id:Naotsugu:20200116225531p:plain

はじめに

Git を利用する際 .gitignore にファイルやディレクトリを指定することで、リポジトリ管理の対象から除外することができます。

例えば Windows の場合のThumbs.db や macOS の .DS_Store といったプラットフォーム別の制御ファイルであったり、各種エディタの一時ファイルやログ・ファイルなどは、うっかりリポジトリに登録しないように予め .gitignore に定義してリポジトリ管理の対象から除外すべきです。

色々な環境やツールを考慮した .gitignore ファイルを定義するのも以外と大変です。

ここでは、Github の公開するテンプレートから簡単に .gitignore ファイルを作成する方法を紹介します。


Github 管理の .gitignore テンプレート

Github で様々な言語やツールの .gitignore テンプレートが公開されています。

github.com


以下のようになっています。

f:id:Naotsugu:20200116214552p:plain

  • ルートフォルダには、一般的なプログラミング言語とテクノロジのテンプレート
  • Global には、各種エディター、ツール、およびオペレーティングシステムのテンプレート
  • community には、現在主流のテンプレートに属していない言語、ツール、環境などのテンプレート


ルートにあるものか、Global にあるもので事足りると思います。


.gitignore の作成

Githubが公開するテンプレートから、コマンドラインで簡単に .gitignore を作成することができます(gibo というツールを使っても良いですが、結局 gibo も Github の公開テンプレートを使っているだけです)。

Java のプロジェクトで Gradle 使うような場合、以下のようにできます。

$ curl -sS https://raw.githubusercontent.com/github/gitignore/master/{\
Java.gitignore,\
Gradle.gitignore,\
Global\/JetBrains.gitignore,\
Global\/Eclipse.gitignore,\
Global\/NetBeans.gitignore,\
Global\/macOS.gitignore,\
Global\/Linux.gitignore,\
Global\/Windows.gitignore\
} >> .gitignore

ブレース展開で各種ファイルをダウンロードしてファイルに追記しているだけです。


ここでは以下を対象に含めました。

言語・ツール(Java・Gradle)

エディタ(IntelliJ IDEA・Eclipse・NetBeans)

OS(macOS・Linux・Windows)


以下のようなファイルができます。

# 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*
.gradle
/build/

# Ignore Gradle GUI config
gradle-app.setting

# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar

# Cache of project
.gradletasknamecache

# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
# gradle/wrapper/gradle-wrapper.properties
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# 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

# 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

# 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
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath
.recommenders

# External tool builders
.externalToolBuilders/

# Locally stored "Eclipse launch configurations"
*.launch

# PyDev specific (Python IDE for Eclipse)
*.pydevproject

# CDT-specific (C/C++ Development Tooling)
.cproject

# CDT- autotools
.autotools

# Java annotation processor (APT)
.factorypath

# PDT-specific (PHP Development Tools)
.buildpath

# sbteclipse plugin
.target

# Tern plugin
.tern-project

# TeXlipse plugin
.texlipse

# STS (Spring Tool Suite)
.springBeans

# Code Recommenders
.recommenders/

# Annotation Processing
.apt_generated/
.apt_generated_test/

# Scala IDE specific (Scala & Java development for Eclipse)
.cache-main
.scala_dependencies
.worksheet
**/nbproject/private/
**/nbproject/Makefile-*.mk
**/nbproject/Package-*.bash
build/
nbbuild/
dist/
nbdist/
.nb-gradle/
# 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
*~

# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*

# KDE directory preferences
.directory

# Linux trash folder which might appear on any partition or disk
.Trash-*

# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db

# Dump file
*.stackdump

# Folder config file
[Dd]esktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp

# Windows shortcuts
*.lnk


まとめ

Github で管理されている .gitignore テンプレートで網羅性の高い .gitignore が簡単に作成できます。

これでうっかりリポジトリを汚すことも少なくなるかと思います。

.gitignore については以下を参照してください。

blog1.mammb.com




Gitが、おもしろいほどわかる基本の使い方33 改訂新版

Gitが、おもしろいほどわかる基本の使い方33 改訂新版

実用Git

実用Git

  • 作者:Jon Loeliger
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2010/02/19
  • メディア: 大型本

よくわかる入門Git

よくわかる入門Git

  • 作者:昌子 正俊
  • 出版社/メーカー: 秀和システム
  • 発売日: 2019/09/28
  • メディア: 単行本