はじめに
アドベンチャーカレンダーのネタを探している際、ふと「.gitignore 以外にも、Git の管理からファイルを除外する方法ってあるのかな?」と思って調べたところ、実は複数あることがわかりました。
せっかくなので、ネタ稼ぎを兼ねて自分の備忘録も兼ねて Git でファイルを“追跡させない”ための方法 をまとめて共有したいと思います。
.gitignore は最もよく使う仕組みですが、「既にコミット済みのファイルを除外したい」
「特定のユーザーだけ除外したい」などのケースでは .gitignore だけでは不十分です。
この記事では、目的別に使える除外方法を整理します。
.gitignore
最も一般的で、一番最初に思いつく方法ですね。
node_modules/
.env
*.log
ただし注意点として、すでにコミットされているファイルは無視されません。
グローバル .gitignore
これもよく使うものではないでしょうか?
macOS の .DS_Store やエディタのキャッシュなど、複数プロジェクトで不要なファイルを ignore したい場合に便利です。
まず設定ファイルを確認:
git config --global core.excludesfile
なければ設定する:
git config --global core.excludesfile ~/.gitignore_global
これで .gitignore に毎回 .DS_Store を書く苦行から解放されます。
git rm --cached
毎回コマンドを打たないといけないだろというツッコミは受け付けません。
すでに追跡されているファイルを除外したいという時に使えます。
既に Git の管理下にあるファイルは、.gitignore に書いても無効です。
その場合は次のコマンドで追跡だけ解除します。
git rm --cached <ファイル名>
同時に使えば .gitignoreの入れ忘れも簡単に修正できます。
git rm --cached .env
echo ".env" >> .gitignore
こうすることで、ファイル自体はローカルに残したまま Git の管理から外れます。
コミット済みのすべての無視すべきファイルを一括除外する
例えば .gitignore に書き忘れて、不要ファイルを大量にコミットしてしまった場合。
git rm -r --cached .
git add .
git commit -m "Remove ignored files"
この手順で .gitignore に書かれたパターン全てが追跡から外れます。
.git/info/exclude
.gitignore はリポジトリ全体で共有されますが、自分のローカルだけで無視したいファイルは .git/info/exclude を使えば無視できるようになります。
my-local-test.txt
.DS_Store
この設定は GitHub にも push されず、他人の環境に影響を与えません。
おわりに
ファイルを無視する設定には色々な種類があり、内容によって使い分けると便利になるようです。
まぁ、実際使うのは .gitignore とグローバルの方だけかと思いますが。
最後まで読んでいただき、ありがとうございました。