Git・GitHub・はじめてのコミット

.gitignore——記録しないものを決める

node_modulesや.DS_Store、パスワードの入ったファイル——Gitに入れてはいけないものがあります。.gitignoreの書き方と、うっかり記録してしまったときの外し方をまとめました。

Gitは、フォルダの中身を何でも記録できてしまいます。でも記録してはいけないもの・する意味がないものがあります。それを指定するのが.gitignoreというファイルです。

Gitに入れないほうがいいもの3種

種類理由
復元できるものnode_modules/、ビルドの出力フォルダコマンド1つで作り直せるので記録する意味がない。しかも巨大
パソコンが勝手に作るもの.DS_Store(Mac)、Thumbs.db(Windows)自分の環境の都合。他の人には不要なゴミになる
人に見せてはいけないものパスワード・APIキーを書いたファイル一度GitHubに上げると、消しても履歴から取り出せてしまう

3つめは特に大事です。公開リポジトリに載ったパスワードは、数分で機械に拾われると考えてください。

.gitignoreの作り方

リポジトリのいちばん上(index.htmlと同じ階層)に、.gitignoreという名前のファイルを作ります。

my-site/
├── .gitignore   ← 今回作る
├── images/
│   └── shima.png
├── index.html
├── script.js
└── style.css

中身は、無視したいものを1行に1つ書くだけです。

# Mac・Windowsが勝手に作るファイル
.DS_Store
Thumbs.db

# npmの部品置き場
node_modules/

# 鍵の入ったファイル
.env

#で始まる行はコメント(メモ)で、Gitからは無視されます。何のための行なのか、書き添えておくと後で助かります。

書き方のパターン

書き方意味
.DS_Storeこの名前のファイルを、どの階層にあっても無視する
node_modules/このフォルダごと、中身もまとめて無視する
*.log拡張子が.logのファイルを全部無視する(*は「何でも」の意味)
draft/memo.txtこの場所のこのファイルだけ無視する
!important.log無視の対象から除外する(!は「これは例外」の意味)

*!は、慣れるまで無理に使わなくて構いません。最初はファイル名かフォルダ名をそのまま並べるだけで十分に役立ちます。

ちゃんと効いているか確かめる

.gitignoreを書いたら、git statusで確認します。

git status

無視の指定が効いていれば、.DS_Storenode_modules/が一覧から消えています。逆に、まだ表示されるならファイル名の書きまちがいか、置き場所が違う可能性があります。

すでにコミットしてしまったものを外す

ここが最大のつまずきどころです。.gitignoreは「まだ記録していないファイルを無視する」ための設定なので、すでに記録済みのファイルには効きません。

外すには、管理対象から取り下げるコマンドを使います。

git rm --cached .DS_Store
git commit -m ".DS_Storeを管理対象から外した"

--cachedが付いていると、手元のファイルは消さずに、Gitの管理からだけ外すという意味になります。フォルダごと外すときは-r(中身も一緒に、の意味)を足します。

git rm -r --cached node_modules

このレッスンのまとめ

  1. .gitignoreに書いたファイル・フォルダは、Gitが記録しなくなる
  2. 入れないのは復元できるもの・環境が作るゴミ・秘密のものの3種
  3. すでに記録済みのものはgit rm --cachedで外す。--cachedを忘れると本物が消える

よくある質問

.gitignoreは必ず必要ですか?
HTMLとCSSだけの小さなサイトなら無くても動きます。ただしMacの.DS_Storeやnpmのnode_modulesは放っておくと必ず混ざるので、最初に置いておくのが安全です。
すでにコミットしたファイルを.gitignoreに書いても消えないのはなぜ?
.gitignoreは「まだ記録していないファイルを無視する」設定だからです。すでに記録済みのものはgit rm --cachedで管理対象から外してから、あらためてコミットします。
パスワードを書いたファイルをコミットしてしまったら?
そのファイルを管理から外すだけでは履歴に残り続けます。GitHubに上げてしまった場合は、パスワードやAPIキー自体を無効にして作り直すのがいちばん確実です。