gitの管理対象から特定のファイルを外す

2018/04/24

Laravel プロジェクトを作成すると、自動でgitignoreも作成されます。

デフォルトで記述されているディレクトリ・ファイルは以下のようになっています。

/vendor
/node_modeules
/public/storage
Homestead.yaml
Homestead.json

これらは最初から管理対象から外されます。

しかし開発を進めていくと、途中から上記以外にも管理対象から外したいファイルが出てきます。

この場合、gitignoreに追記するだけでは足りません。

作業ツリーに残ったままになってしまうのです。

今回はそんなケースについての対応をエントリーします。

 

ユースケース

Git でバージョン管理していたファイルを残したまま追跡の対象外にしたい。

しかし既に管理対象になっているファイルは、後から.gitignoreにファイル名を追加しても変更の追跡が継続される。

例)ideaディレクトリ以下にあるファイルをgitの管理対象から外す

警告【 ideaディレクトリとは 】
ジェットブレーンのIDE(WebStorm IDE、phpStorm)で開発すると自動で生成されるディレクトリです。IDEのプロジェクトの設定ファイルが入っています。

 

手順

一旦ファイルを削除したというcommitを作成して、再度加えることで管理の対象外だと認識させます。

1).gitignoreに追記する
2)gitコマンドを実行

 

1).gitignoreに追記する

gitignoreに管理対象から外すファイルを指定します。

警告# → コメント
* → ワイルドカード( / 以外の0文字以上の文字にマッチ)
# 特定のファイル名を無視する
# → 対象範囲のファイルすべて無視される
sample.txt

# 特定のファイルのみ無視する
# ルート直下のファイルを無視する場合
/sample.txt

# 特定の拡張子を無視する
# → 対象範囲の該当ファイルはすべて無視される
*.json

# 特定のディレクトリ名を無視する(※チュートリアル)
# → 対象範囲の該当ディレクトリすべて無視される
.idea/

# ルートからのパスを指定して特定のディレクトリを無視する
common/css/

# 特定のディレクトリ名直下にある特定の拡張子を無視する
**/img/

# 指定したファイル/ディレクトリを無視しない
!common/img/*.mp3
警告
ルートは .gitignore のあるディレクトリとします。

gitignore に追記しただけだと作業ツリーに一部データが残っていたりします。

 

2)gitコマンドを実行

Bitbucket の GUI では該当するコマンドがないのでコンソールで作業します。

コマンドの構文は以下になります。

【 構文 】
# ファイル指定してキャッシュ削除
git rm --cached hoge.txt

# ディレクトリを指定してキャッシュ削除
git rm -r --cached hoge/

# ファイル全体キャッシュ削除
git rm -r --cached .

警告--cached オプションのあるなしの違いは、ファイルを手元(※ワーキングツリー)から削除するかどうかである。
警告--cachedありの場合、そのファイルはGitの管理対象から外れるが、手元からは削除されずに残ったままの状態となる。

これでローカルでファイルを残したまま管理対象から外すことができます。

【 参考 】

★ 管理対象から外す+ファイルも削除

git rm hoge.txt

★ ディレクトリごと削除

git rm -r hoge/
警告--cachedなしの場合、そのファイルはGitの管理対象から外れ、手元からも削除される。

上手くいけば以下のようになります。

このあとは、通常通りコミット → プッシュすればOKです。

以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-環境構築