.gitignoreの書き方

投稿日:2017年2月27日 更新日:

こんばんは、okuzawatsです。
プログラムを書かない日があってもGitを触らない日はない、というくらいGitから離れられなくなっています。

さて、Gitを使う人は.gitignoreを書かなければなりませんね。

.gitignoreとは、Gitの管理対象にしたくないファイルやディレクトリを設定するためのファイルです。
.gitignoreを書かないと、ゴミのようなデータがGitのリポジトリに登録されたりして、Gitが使いものにならなくなってしまいます。
Gitを使う人は、.gitignoreから逃れられない運命なのです。

今回は、.gitignoreの書き方、使い方について、改めてまとめてみたいと思います。
具体的には、

  • .gitignoreの文法
  • .gitignoreに追加したファイルが消えてくれない時の対処法
  • 空のディレクトリを追跡する方法

などについて書いていきます。
どれも、仕事でGitを使っている時、実際に必要になった知識です。
Gitの初心者の方は、目を通しておくといつかきっと役に立つ時がくると思います。

ところで、.gitignoreを自動で生成してくれるツールもあるようですね。
自分は使ったことがないので、ここでは触れません。
興味があったら、ご自身で調べてみてください。

「.gitignore」とは

.gitignoreとは、Gitのリポジトリに追加したくない(無視したい)ファイルを設定するためのファイルです。
「.gitignore」というファイル名でファイルを作成します。
Gitの管理下にあるディレクトリ内、またはそのサブディレクトリに作成します。
自分で作成しない限り、.gitignoreというファイルは存在しません。

.gitignoreは、任意のディレクトリに置くことができます。
より深い階層に置かれた.gitignoreの設定が優先されます。
.gitignoreが置かれているディレクトリ内すべてに.gitignoreの設定が反映されます。

ファイル名が.(ドット)から始まる不可視ファイルになっているので、通常は見えません。
.gitignoreを編集するときは、不可視ファイルを意図的に表示させるか、Vimで直接編集するかしましょう。

Macで不可視ファイルを表示させるには、以下のコマンドを打ちます。

defaults write com.apple.finder AppleShowAllFiles TRUE
killall Finder

再び不可視ファイルを隠すには、以下のコマンドを打ちます。

defaults write com.apple.finder AppleShowAllFiles FALSE
killall Finder

.gitignoreの作り方

極めて基本的な方法で.gitignoreを作ってみます。
.gitignoreを置くのは、例えば、プロジェクトのディレクトリ直下などです。
ターミナル上でプロジェクトディレクトリ直下に移動したら、vimで.gitignoreを作ります。

vim .gitignore

ここにファイルやディレクトリを指定していきます。

例えばMacなら、ディレクトリの内部を表示すると.DS_Storeというファイルが作られますが、これはプロジェクトに関係ないためGitの管理から外したいです。
そういう時は、.gitignore内に.DS_Storeと書いてあげます。

.DS_Store

これで、プロジェクトのリポジトリでは、すべてのディレクトリ内にある.DS_StoreファイルがGitの管理対象から外れます。

.gitignoreの書き方

.gitignoreの中身の書き方を見ていきます。

まずは基本の確認。

.gitignoreでは、個々の設定は改行によって区切られます。
すなわち、設定を書く時は1行に1個です。
コメント行も作ることができます。
何も書いていない空行は無視されます。

基本を確認したところで、具体的な.gitignoreの設定方法を見ていきましょう。

"#"で始まる行はコメントです。

# これはコメントです

ファイル名を指定した場合、対象のファイルはGitから無視されます。

下の例では、sample.txtを無視します。

sample.txt

"/"で終わる行は、ディレクトリを表します。
対象のディレクトリは、Gitから無視されます。

下の例では、tmpディレクトリとその下にあるファイル・ディレクトリを無視します。

tmp/

"*"は、任意の文字列を表します(ただし、"/"は除く)。
特定の拡張子のファイルをGitの管理対象から外したい時に良く使います。

下の例では、exe形式のファイルをすべて無視します。

*.exe

"!"は、無視する規則の例外を指定します。
例えば、exeファイルは無視するが、hoge.exeだけは追跡対象とする場合はこう書きます。
必ず、無視する規則を書いた行より後ろに書きます。

*.exe
!hoge.exe

他にも.gitignoreの設定の書き方はありますが、良く使うのはこれくらいです。
たいていの場合は上にあげた例の組み合わせで事足ります。

空のディレクトリをGitの管理対象にする

空のディレクトリをGitの管理対象にしたい、ということが時々あります。
例えば、キャッシュ用のディレクトリや一時ファイル用のディレクトリですね。

実は、Gitは空のディレクトリを管理してくれません。
意図的に空のディレクトリをGitの管理対象に含めなくてはなりません。

そのような時は、.gitkeepという名前の空のファイルを対象のディレクトリ内部に作ってあげます。
これだけで、空のディレクトリがGitの管理対象になります。

例えば対象のディレクトリがキャッシュディレクトリの場合。
ディレクトリの中身は空だけど、後でファイルがあっても無視したいですね。
そんな時は、ディレクトリの中に.gitkeepを作った後、こんな感じで.gitignoreを書いてあげます。

cache/*
!.gitkeep

これでcacheディレクトリはGitの管理対象となり、中身は無視され、.gitkeepはGitの管理対象になります。

実は、ファイルの名前は.gitkeepである必要はなく、何でも大丈夫です。
慣習的に.gitkeepというファイル名が使われています。
特段の理由がなければ、慣習に従って.gitkeepというファイル名を使いましょう。

.gitignoreの更新

すでにGitで管理されているファイルを.gitignoreに追加しても、管理対象から削除してくれません。

そんな時は、"git rm"コマンドを使ってファイルを管理対象から削除してあげましょう。

git rm -f example.txt

管理対象から削除したいファイルが大量にある場合は、一回すべてのファイルを管理対象から外した後、再びすべてのファイルをコミットします。
再びコミットする時は、.gitignoreの内容が考慮されるので、意図したファイルのみがリポジトリに追加されます。

こんな感じでコマンドを打っていきます。

git rm -r --cached .
git add .
git commit -m "update .gitignore"

何か他の作業をしている時にこういうことをやると大変なことになってしまいます。
.gitignoreの更新作業は、リポジトリが綺麗な状態の時にやりましょう。

Gitの管理対象となっているファイルを確認する

Gitの管理対象となっているファイルを確認するには、以下のコマンドを打ちます。

git ls-files

逆に、Gitの管理対象となっていないファイルを確認する(=.gitignoreの対象となっているファイルを確認する)ためには、以下のコマンドを打ちます。

git ls-files --others --ignored --exclude-standard

それぞれ、ファイルの一覧がターミナル上に表示されます。

.gitignoreのテンプレート

GitHubが.gitignoreのテンプレートを公開しています。
Android、Swift、CakePHPなど、数十種類のプラットフォームに対応した.gitignoreのテンプレートが用意されています。

github/gitignore: A collection of useful .gitignore templates

この.gitignoreのテンプレートを使えば、プラットフォームごとに典型的な.gitignoreが作れます。
同一のプラットフォームなら、.gitignoreの大枠は同じになるはずです。
あとは、Gitのリポジトリに追加したくないファイルを個別に追記してあげればいいですね。

例えばAndroidアプリ用の.gitignoreは、ここに置いてあります。

gitignore/Android.gitignore at master · github/gitignore

冒頭の数行を引用してみます。

# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

こんな感じで、開発の過程で生成されるけどGitの管理対象としたくないファイルなどを.gitignoreに書いていきます。

GitHubが公開している.gitignoreのテンプレートを自分のプロジェクト内にコピー&ペーストすれば、いい感じの.gitignoreが使えるようになります。
また、このテンプレートを眺めていると.gitignoreの書き方がだんだんわかってくると思います。

茨城県つくば市在住のAndroidアプリエンジニアです。Androidアプリ開発に関して何かあれば、メールフォームからお問い合わせください。できる範囲でお答えします。

メールフォーム

-プログラミング

Copyright© Androidアプリ開発@つくば , 2017 AllRights Reserved Powered by AFFINGER4.