gitでファイルや資料などを管理するようになって、普段あまりgitを利用しない人たちからgitの管理化に置きたくファイルがあるんだけど、どうすればいいのか?という相談を受け、一緒にハンズオン形式で、.gitignoreファイルについて説明しました。今回は、.gitignoreについて簡単にまとめておこうとおきます。

.gitignoreとは

gitで開発を行うとgit上で管理したくないファイルが出てくることがあります。

  • 自動生成されるファイル
  • コンパイル、ビルド成果物
  • 環境設定情報
  • AWSのクレデンシャル情報などのセキュリティ情報

これらの情報をワーキングツリー上においてもgitに登録されない(=git add & git commit)を通常で出来ないように設定したする場合によく利用します。

.gitignoreは、基本的に以下のことが出来ます。

  • ファイル or ディレクトリを指定してGit管理対象外とすることができる。
  • コメントを記載できる。
  • .gitignoreファイルを複数のディレクトリにおくことができる。
  • 階層の深い.gitignoreファイルの設定が優先される。
  • .gitignoreファイルの内容は、上から順に解釈される。
  • この設定は、インデックス登録の際に効く。

.gitignoreの書き方

簡単に記載方法について振り返ってみます。

.gitignoreファイルの例を見てみましょう。

# hogehogeファイルを無効にする <- #以降は、コメント

# .gitignore以下の全サブディレクトリ化でsample.jsファイルを全て無視する。
sample.js

# 現在のディレクトリのhoge.jsのみ無視する。
/hoge.js

# 無視しないことも明記できる。
!hoge.js

# ワイルドカード(*,?,[0-9]、**など)も使える。下記例では、全てを対象とする。
*

このように管理をすることを明記でき、ワイルドカードも利用できるので特定の拡張子(ex. 画像ファイル)のものだけは、除外するなどすることも可能です。

つまっていたところ

よく質問に上がった内容を記載しておこうと思います。

.から始まるファイル作れない

windowsだと.で始めるファイルをGUI操作では出来ないので、コマンドプロンプトを利用してファイルを作成するのが早い。コマンドは、type nul > .gitignoreでできる。

ファイルに記載を追記しても反映されない

git addをしたファイルに対しても設定は効かないので、すでに登録済みの場合には、インデックスからの解除が必要になります。コマンドは、git rm --cached ファイルパスです。

特定のディレクトリだけホワイトリストで管理したい

何が生成されるかわからないので、ホワイトリストで指定したいというケースです。ディレクトリなどをシンボリックリンクで管理している場合に多く発生する気がします。下記のように一度全部を管理対象外としてしまい、必要なファイル、ディレクトリをホワイトリスト(!)で指定していく形となります。

# 全てを管理対象外とする
/*
/.**

#ホワイトリストに追加したものをファイル、ディレクトリ毎に記載する
!.gitignore
!hoge.html
!/hogehoge/

おわりに

今回は、.gitignoreファイルの記載方法やよくつまることろについてまとめました。シェルなどの正規表現などになれている方は、ワイルドカードも利用できるので馴染みがあると思いますが、普段GUI操作を行っている方には、最初は少しハードルが高いと感じるかもしれませんが、なれると便利なので是非少しずつでも触って見てください。