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

gitの管理対象外にしたいファイルは .gitignore というファイルに記述します。

しかし開発途中で管理対象から外したいファイルが出てきた場合、.gitignore に追記するだけでは足りません。

ワークディレクトリに残ったままになってしまうのです。

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

未追跡ファイル(ステージエリアに追加していないファイル)は.gitignore に記述したらgit statusで即座に表示されなくなります。

 

やりたいこと

訳あってローカルとサーバーのPHPのバージョンが違う

composer.jsoncomposer.lock のファイルはgitの対象ファイルから外したい。

→ gitignoreに追記したのにワークディレクトリには常に表示されて鬱陶しい。

 

作業手順

.gitignoreに記述してgit push

git の管理対象外にしたいファイルを.gitignoreに記述します。

記述したらgit pushでリモートリポジトリにも送ります。

次にSSHでサーバーにアクセスしてgit pullをして同期をとります。

 

ファイルを指定してキャッシュを削除

サーバー側から以下のコマンドを実行します。


# ファイルを指定してキャッシュ削除
git rm --cached composer.json
git rm --cached composer.lock

git commit -m "untrack files"
git push

 

ポイント

--cached オプションのあるなしの違いは、ファイルを手元(ワークディレクトリ)から削除するかどうか

 

ローカルに戻って対象ファイルをバックアップ

ローカルに移動してgit pullするわけですが、このままだと composer.json と composer.lock が消えてしまうので手動でバックアップ

 

git pull 実行

git pullを実行してコンフリクトを起こした場合、スタッシュを実行してプルします。


$ git stash save "2019-09-03"
$ git pull

$ git stash apply

 

 

手作業で削除されたファイルを元に戻す

このままだと次に何かコミットするときに怒られるので消します。


$ git rm composer.json
$ git rm composer.lock

 

次にバックアップしていたcomposer.jsonとcomposer.lockを手動で元に戻します。

これでgit statusを実行してもワークディレクトリに表示されません。

とても正攻法と呼べるやり方ではありませんが。。(汗)

 
以上です。

本庄マサノリ

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

>> Twitter をフォローする

 

-環境構築