今回は、Gitで特定のファイルを無視する方法について解説します。
Gitを使っていると、次のような場面はありませんか?
node_modulesを管理したくない.envやパスワード情報を除外したい- 一時ファイルをコミットしたくない
このようなときに使うのが.gitignoreです。
.gitignore を使えば、Gitの管理対象から不要なファイルを除外できます。
この記事では、.gitignore の基本的な使い方から、よく使う書き方、反映されないときの対処法まで解説します。
.gitignoreとは?
.gitignore は、Gitで「管理しないファイル」を指定するための設定ファイルです。
例えば、以下のようなファイルは通常Git管理しません。
- 一時ファイル
- ビルドファイル
- キャッシュ
- APIキーや秘密情報
- ライブラリ依存ファイル
これらを毎回コミットしてしまうと、
- リポジトリ容量が大きくなる
- 不要な差分が増える
- セキュリティ事故につながる
といった問題が起きます。
そのため、.gitignore を使って除外設定を行います。
.gitignoreの作成方法
まずは、Git管理しているプロジェクトフォルダの直下に .gitignore を作成します。
touch .gitignore
Windowsの場合は、テキストファイルを作成して名前を.gitignoreに変更してもOKです。
.gitignoreの基本的な書き方
.gitignoreファイルの記載方法についてです。
特定ファイルを無視する
例えば、プロジェクト直下の.envを無視したい場合は、そのままファイルを記載すると良いです。
.env
特定フォルダを無視する
特定のフォルダを無視したい場合、プロジェクト直下からのフォルダのパスを書くようにします。
末尾に / を付けるとディレクトリ指定になります。
node_modules/
これでnode_modules配下のファイルが全て無視されます。
拡張子で無視する
ワイルドカードを使って、拡張子で指定することもできます。
例えばログファイルを無視するには、下記のように指定します。
*.log
これで全ての .log ファイルが無視されます。
特定ファイルだけ除外しない
特定ファイルだけ除外しない場合は「!」を使います。
例えばlogsフォルダの配下のファイルは無視したいが、配下のkeep.logファイルのみは管理したい場合です。
logs/
!logs/keep.log
! を付けると除外対象から外せます。
すでにコミット済みのファイルは無視されない
.gitignoreで、ハマりがちなポイントです。
.gitignore に追加しても、すでにGit管理されているファイルは無視されません。
例えば、下記のように追加しても、以前コミット済みなら追跡され続けます。
.env
Git管理から外すために、対象ファイルを追跡対象から削除する必要があります
Git管理から外す方法
既にGit管理しているファイルを、Git管理対象からはずして、.gitignoreに反映する方法です。
以下を実行します。
git rm --cached .env
フォルダならこちらになります。
git rm -r --cached node_modules
これで、管理対象外になるので、その後コミットします。
git commit -m "Remove ignored files"
そうすると、.gitignoreの設定が反映されます。
注意点
git rm --cachedを使うと、削除したという履歴でステージされます。
そして、その後にコミットして、プッシュします。
そのため、他のメンバーが次回プル(取得)するときには、ファイルが消えるということになるため、注意しましょう。
まだ、誰も環境に触れていない、初期の立ち上げ段階なら問題ないです。
既にファイルを取得している可能性がある場合は、連絡しておくと安心です。
.gitignoreが反映されない原因
.gitignoreが反映されない原因についてです。
すでにGit管理されている
もっとも多い原因です。
以下を実行して、管理対象から外した後に、コミット・プッシュしましょう。
git rm --cached ファイル名
書き方が間違っている
例えば、下記でも動きます。
node_modules
ですが、フォルダなら / を付けたほうが分かりやすいです。
node_modules/
また、単純にlogs/と書いた場合だと、プロジェクト直下のlogs/以外にも
storage/logs/のように下の階層のlogs/フォルダを巻き込んでしまいます。
logs/
ほかの階層を巻き込みたくない場合には、/logs/といったように、/から始めてプロジェクト直下からの位置を書くと良いです。
/logs/
.gitignoreの場所が違う
通常はGitプロジェクトのルートに配置します。
下記のような構成です。
.git/
.gitignore
src/
グローバルな.gitignoreを設定する方法
グローバルな設定をしておくことで、Gitに常に除外したいファイルを設定することができます。
PC全体で共通除外したい場合に便利です。
例えば、下記のようなファイルです。
.DS_StoreThumbs.db- エディタ設定ファイル
作成
設定するには、まず下記のように、ユーザーディレクトリ配下に.gitignore_globalファイルを作成します。
touch ~/.gitignore_global
Gitへ設定
そのあとに、git configを使って、下記のように設定します。
git config --global core.excludesfile ~/.gitignore_global
例
.gitignore_globalには、全体で除外するものを下記のように記載できます。
.DS_Store
Thumbs.db
.vscode/
.gitignoreでよくあるミス
.gitignoreでよくあるミスです。
.envをGitHubへpushしてしまう
APIキーやDBパスワード漏洩につながります。
.env は基本的にignore推奨です。
値を未設定の.env.exampleファイルなどを管理対象にしましょう。
node_modulesをコミットする
プロジェクトで使う外部のライブラリまでプッシュしてしまうと、容量が巨大になり、取得するときに大変です。
通常はpackage.jsonで管理します。
途中から.gitignoreをコミットする
プロジェクトの途中から.gitignoreを追加すると、それまでコミットしていたものは対象外になります。
上記で記載したgit rm --cachedコマンドなどを使用して調整が必要です。
.gitignoreを確認する方法
.gitignoreに設定しているファイルが、無視されているか確認したい場合です。
git status
通常、ignore対象は表示されません。
また、VSCodeなどのGUIエディタでも.gitignoreに設定されていれば非表示になります。
ignoreのルール確認や、どこで設定されているかを確認するには、下記のコマンドが使えます。
git check-ignore -v ファイル名・ディレクトリ名
例として、下記ではlogs/ディレクトリを確認しています。
git check-ignore -v logs/
実行すると、下記のように表示されます。
% git check-ignore -v logs
.gitignore:2:/logs/ logs
どの.gitignoreルールで無視されたか確認できます。
まとめ
今回は、Gitでファイルを無視する方法について解説しました。
重要なポイントをまとめると、
.gitignoreでGit管理対象外を設定できる.envやnode_modulesはignore推奨*.logのように拡張子指定も可能- すでにコミット済みファイルは
git rm --cachedで対象外にする必要がある - 適用ルールは
git check-ignoreで確認できる
.gitignore はGit運用で非常によく使う機能です。
特にAPIキーや秘密情報の漏洩防止にも関わるため、重要情報があるファイルなどはプロジェクトの初期から除外しておくように設定しましょう。

コメント