.gitignoreが反映されない!キャッシュ原因でないときは?

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。タクマ™ [@suwaru_blog] です。

.gitignore が反映されず、ファイルが無視されない!
ググッたら「キャッシュが原因」というけど、そのコマンド打っても駄目!

そんな悩みでお困りのあなた…
多分そのファイル、リモートリポジトリで既に管理されていませんか?

今回はローカルで変更したファイルの追跡を無視する Git コマンド、
git update-index --skip-worktree について解説します!

まず git rm -r –cached について解説

まだ Git 管理されていないけど、コミットやプッシュでキャッシュが残ってしまった場合、
キャッシュクリアすると .gitignore が適用されることがあります。

# すべてをキャッシュクリア
git rm -r --cached .
git add .

# ファイル指定してキャッシュクリアする
git rm -r --cached [ファイル名]
git add [ファイル名]

git update-index –skip-worktree

.gitignore はまだ Git で管理下にないファイルやフォルダを記述します。

なので、既に Git 管理化にあるファイルは(キャッシュクリアしても)無視できません。
Git 管理下にあるファイルに対しては git update-index --skip-worktree を使います。

利用シーン

具体例をあげるなら、以下のようなときです。

  • ローカル開発環境で自分用に docker-compose.yml を編集した
  • ローカル開発環境だけのファイルが生成されたので .gitignore を編集した

自己都合のコミットはしたくないので、ステージングから取り除きたい」場合に使います。

コマンド

そのような場合は git update-index --skip-worktree [ファイル名] と入力してください。

git update-index --skip-worktree .gitignore
git update-index --skip-worktree docker-compose.yml

元に戻したい場合は git update-index --no-skip-worktree [ファイル名] としてください。

git update-index –assume-unchanged

あまり使う機会はないと思いますが、
似たコマンドで git update-index --assume-unchanged というものがあります。

利用シーン

  • ローカルの管理が不要だし、環境を高速化したいから取り除きたい

コマンド

git update-index --assume-unchanged [ファイル名]

# 元に戻す
git update-index --no-assume-unchanged [ファイル名]

「変更したファイルがステージングされなくなる」という点では `--skip-worktree` と同じですが、
ローカルで管理する必要がないので取り除く」というニュアンスがあります。

注意点 – git reset –hard で変更が消し飛びます!

git reset --hard を実行するとローカルの変更データがなくなってしまいます。
ローカルで管理する必要のないファイルだから消えても問題ないと判断されるようですね。

お仕事ください!

僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。
なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。

コメントを残す

*