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_Storeやnode_modules/が一覧から消えています。逆に、まだ表示されるならファイル名の書きまちがいか、置き場所が違う可能性があります。
すでにコミットしてしまったものを外す
ここが最大のつまずきどころです。.gitignoreは「まだ記録していないファイルを無視する」ための設定なので、すでに記録済みのファイルには効きません。
外すには、管理対象から取り下げるコマンドを使います。
git rm --cached .DS_Store
git commit -m ".DS_Storeを管理対象から外した"--cachedが付いていると、手元のファイルは消さずに、Gitの管理からだけ外すという意味になります。フォルダごと外すときは-r(中身も一緒に、の意味)を足します。
git rm -r --cached node_modulesこのレッスンのまとめ
.gitignoreに書いたファイル・フォルダは、Gitが記録しなくなる- 入れないのは復元できるもの・環境が作るゴミ・秘密のものの3種
- すでに記録済みのものは
git rm --cachedで外す。--cachedを忘れると本物が消える