Parallels のサイバーマンデー 25% OFF 12月5日まで安く買う方法

.gitignoreの書き方 Gitの管理から除外するファイルを指定

gitignoreの書き方

Gitによるバージョン管理において、特定のファイルを管理から除外する設定の解説です。

目次

グローバルな設定とディレクトリ単位の設定

グローバルな設定

Gitで管理するすべてのプロジェクト(ディレクトリ)に対して除外設定をするには、~/.config/git/ignoreファイルを作成してこれに設定を記述します。

# ユーザディレクトリ直下に .config ディレクトリがなければ作成します(あると思うけど)。
% mkdir ~/.config

# .config下に git ディレクトリがなければ作成します(これはないかも)。
% mkdir ~/.config/git

# ignore ファイルを作成します。
touch ~/.config/git/ignore

ディレクトリ単位の設定

Gitで管理する特定のディレクトリに対して除外設定をするには、そのディレクトリ下に.gitignoreファイルを作成します。

.gitignoreを設置したディレクトリとその下位ディレクトリで設定が有効になります。

.gitignoreファイルはプロジェクトのルートディレクトリの他、サブディレクトリにも設置することができます。複数の.gitignoreが設置されている場合、深い階層のものが優先されます。

.gitignoreファイルがあちこちにあると管理が面倒なので、私はルートにしか置きません。

記述方法

~/.config/git/ignoreまたは.gitignoreファイルに、管理から除外したいファイルやディレクトリの名前を記述します。改行で区切って複数の記述をすることができます。

コメント

# #で始まる行はコメントです 無視されます

名前で指定

名前を記述した場合、その名前と一致するファイル・ディレクトリを無視します。サブディレクトリ下のファイルもマッチします。

# すべての password.txt という名前のファイル・ディレクトリにマッチ
password.txt

ディレクトリを指定

名前の末尾に/を付けた場合、ディレクトリとみなされます。サブディレクトリ下のディレクトリもマッチします。

# すべての log という名前のディレクトリにマッチ
log/

相対パスで指定

末尾以外に/を含む場合、.gitignoreを設置したディレクトリを起点とする相対パスとみなされます。

# .gitignore を起点とした path/to/directory にマッチ
path/to/directory

# 上記と同じ 先頭の / はあってもなくても同じ
/path/to/directory

ワイルドカード

*/以外の0文字以上の文字列にマッチ
?/以外の1文字にマッチ
[]/以外の指定した1文字にマッチ [0-9][a-zA-Z]など
**0個以上のファイルまたはディレクトリにマッチ
# 拡張子が .log のファイル・ディレクトリにマッチ
*.log

# file-a, file-b などにマッチ
file-?

# file-0 から file-9 にマッチ
file-[0-9]

# /foo, /foo/bar, /foo/bar/baz などにマッチ
/foo/**

# /foo, /bar/foo, /bar/baz/foo などにマッチ
/**/foo

# /foo/bar, /foo/baz/bar, /foo/baz/qux/bar などをにマッチ
/foo/**/bar

打ち消し

!で始まる場合、!以降のパターンにマッチするファイルやディレクトリを無視しません。これより前に行った除外設定を打ち消すときに使います。

# /file だけを追跡する
*
!/file

ご注意ください。Gitはディレクトリを無視する設定をした場合に、そのディレクトリの配下のファイルの除外設定を打ち消すことができないという制約があります(ややこしい)。

# この場合、打ち消すことはできない
/foo/
!/foo/bar

#これならOK
/foo/*
!/foo/bar

除外設定が反映されないときは

これまで.gitignoreに記載されたファイルは Git による管理から除外されると説明してきましたが、嘘でした。

正確に言うと、.gitignoreに記載されたファイルはgit addを実行したときにインデックスに追加されないんです。つまり、すでにインデックスに追加されているファイルは後から除外設定をしても手遅れなのです。アーメン。

このような場合はgit rmコマンドでインデックス済みファイルをインデックスから削除しましょう。--cachedオプションを付けるとインデックスからのみ削除します。付け忘れるとワーキングツリーからも削除されてしまいますのでご注意を。

# ファイル名を指定してインデックスから削除
git rm --cached <ファイル名>

# または、すべてのファイルをインデックスから削除(ファイルが複数ある場合はこれでもOK)
git rm -r --cached .

# あらためて add
git add .

# コミット
git commit -m "除外設定を変更"

何を除外するべきか

具体的にどんなファイルをGitの管理から除外するべきなのでしょうか。さまざまな環境で使える.gitignoreのテンプレートが用意されています。あら便利。

上記のテンプレートが完璧すぎて私はもう何も言えないのですが、細かすぎてめんどくせーよというあなたのために、もうちょっとざっくりとした提案をしてみますね。

# マカーならばこれ
.DS_Store

# ドザならばこれ
Thumbs.db

# Node.js を使っているならばこれ
/node_modules/

# Composer を使ってるならばこれ
/vendor/

# パスワードが記載されているファイルは push したくないならばこれ
password.txt

# ログファイルは追跡しないならばこれ
*.log

node_modulesvendorは除外するしないで意見が分かれるところですが、私は除外する派です。

でわでわ

gitignoreの書き方

この記事が気に入ったら
いいね または フォローしてね!

シェアしてね

コメント

コメントする

目次