見出し画像

gitignoreが反映されない!? gitignoreとgitのキャッシュのお話


こんにちは、おがと。(おがとまる)です。

バックエンドエンジニアは分かると思うんですけどサーバーを動かすとバイナリファイルとか諸々がgitに感知されて変更数が多くなるんですよね。

gitignoreを最初に書いておけばいいだけの話なんですけど面倒くさくて変更ファイルだけ選んでプッシュ、みたいにしてる人も一定数いるかと思います(私なんかはよくこれをする)。

gitignoreとは

一応説明を入れると

gitignoreとは、Gitリポジトリにおいて、意図的に追跡対象から外したい(無視したい)ファイルを設定するためのファイルです

とまあGitくん、このファイルに書かれたものに関しては無視していいよ、というものです。

gitignoreの設定方法

gitignoreの設定方法

.gitignoreというファイルを作る

gitに上げなくていいファイルを記載する

これだけです。

一応以下によく使われるフレームワーク毎のテンプレを書いておきます。

Djangoの場合

### Django ###
*.log
*.pot
*.pyc

pythonの場合人によってローカル環境用のsettingファイルやパッケージ等のログファイルもあるかと思うのでここでは純粋なDjangoについてのみ書いています。

Ruby on Railsの場合

# Ignore bundler config.
/.bundle

# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal

# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep

# Ignore uploaded files in development
/storage/*
!/storage/.keep

/node_modules
/yarn-error.log

/public/assets
.byebug_history

# Ignore master key for decrypting credentials and more.
/config/master.key

Railsの場合は新しくアプリを作った段階で自動的にgitignoreを生成してくれるので自分で作ることはあまりなさそうです。

Laravelの場合

vendor/
node_modules/
npm-debug.log

# Laravel 4 specific
bootstrap/compiled.php
app/storage/

# Laravel 5 & Lumen specific
public/storage
public/hot
storage/*.key
.env.*.php
.env.php
.env
Homestead.yaml
Homestead.json

# Rocketeer PHP task runner and deployment package. https://github.com/rocketeers/rocketeer
.rocketeer/

gitignoreが反映されない!?

さて、問題は途中でgitignoreを作った場合です。
よくあるパターンとしてgitignoreを書き忘れて途中で書くことがあります。

そうした場合高確率でgitignoreを書いたのに反映されない減少が起こります。

これはキャッシュが原因で一度Gitの管理下にあったファイルの場合、.gitignoreに追加しただけでは管理対象から外れないことが原因です。

そうした場合は一度キャッシュを削除して再度Gitにコミット&プッシュし直すことで解決します。

方法は

ターミナルで

git rm -r --cached .
を実行

再度コミット&プッシュ

です。

プッシュした際大量のremoveログが出ますがローカルのファイルが全部消えるわけではないので安心してください。

まあこんなことをせずとも最初にgitignoreを書いてしまえば何も問題は無いのでみなさんお忘れのないようにしましょう(自戒)

この記事が気に入ったらサポートをしてみませんか?