最終更新日:2019年05月25日

gitignoreの書き方チートシート【テンプレあり】

.gitignoreのチートシートです。
毎度忘れてググっているので頻繁に使う用法をまとめました。

gitignoreとは

Gitシステムの管理対象から除外したいファイルを指定するためのファイル

.gitignoreファイルの作成

除外ファイルを指定したいフォルダに.gitignoreというファイル名のファイルを作成
しかし拡張子のみのファイルは標準のテキストエディタ(Windowsのメモ帳など)では作成できないので、以下の方法が用いられる

  1. プログラミングする際に使っているテキストエディタで作成(SublimeText、VSCode)
  2. 元からあるファイルを複製

なかなか面倒なので、一旦作成したら別のプロジェクトでもその.gitignoreファイルをコピーしてきて再利用するのが現実的
作成できたら、Git管理から除外したいファイルやディレクトリを指定

コメント

# コメントはこのように"#"を使う

特定のファイルを無視する

特定のファイルのみ指定する場合は以下のようにバスを明記したうえで指定

# 特定のファイルを無視
/directory_name/file_name.log

# 特定のディレクトリを無視
/directory_name/

ファイル・ディレクトリの名前を指定する

この名前と一致している、.gitignore以下の全サブディレクトリ下にあるファイル・ディレクトリを無視

file_name

この場合、以下のようなファイル構成になっているとfile_namedirectory_name/file_nameも両方Git管理から除外されることに注意

├.gitignore
├file_name
└directory_name
  └file_name

特定の拡張子を無視する

ワイルドカードを使って無視したいファイル・ディレクトリを指定することができる
例えば特定の拡張子のファイルのみ指定したい場合などに重宝する

# すべての.dbファイルを無視
*.db

ワイルドカードの使い方

*  # 文字列すべてにマッチ(スラッシュ記号除く)
?  # 1文字にマッチ
[0-9]  # 0-9の数字にマッチ

特定のフォルダの中身全てを無視する

# src フォルダの中身をすべて無視
src/

Githubにフォルダ自体は残しておきたい

  • 空のディレクトリをGitに残すことはできない
  • 残しておきたいフォルダの中に.gitignoreファイルを作成することで対応可能
# directoryという空フォルダを残したい場合
├.gitignore
├file001
└directory
  └.gitignore

エスケープ(エクスクラメーション)の使い方

#などの文字はそのままだとコメントアウトとして認識されてしまうので、\(バックスラッシュ)でエスケープする。

\#.html
# CMSの仕様でバックスラッシュが\マークになってしまうのですが…ここはバックスラッシュです

gitignoreが反映されない場合

後からgitignoreに追加した

  • 一度Gitに登録されたものを後からgitignoreに追加すると、gitignoreに指定されているにも関わらず反映されないことがある
    • 一度ファイルをプロジェクトフォルダ外に移動
      →コミット
      →gitignoreを編集
      →ファイルを元の場所に戻す

キャッシュが残っていた

  • 下記コマンドを実行すれば解決
  • なおファイルを削除するわけではないので心配しなくて大丈夫
$ git rm -r --cached . //ファイル全体のキャッシュを削除
$ git rm -r --cached [ファイル名]  //ファイルを指定してキャッシュ削除

それでも効かない場合

一回全部消してからすべて追加しなおす

$ git rm -r --cached
$ git add .
$ git commit -m "message here"

グローバルで.gitignoreを指定したい場合

プロジェクト作るたびに毎度毎度.DS_Storeなど指定するのにウンザリな方向け

git config --global core.excludesfile ~/.gitignore_global

node_modulesを誤ってインデックス登録してしまった場合

# インデックスからnode_modules以下を削除
$ git rm -r --cached node_modules  

$ git status
On branch master
Initial commit
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

new file:   .gitignore
new file:   app.js
new file:   index.jade
new file:   package.json

.gitignoreを自動生成する(gitignore.io)

gitignore.ioとは

  • gitignoreファイルのテンプレートをWebからアクセスしやすいようにしたサービス
  • それぞれの言語に最適化したテンプレート一覧を用意

Pythonのテンプレート

Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/