皆さま、いかがお過ごしでしょうか。歌乃です。
普段コードの編集にVisual Studio Code を使用しています。
こんなに素晴らしいエディターがオープンソースで自由に使えるなんて、開発者の方々に感謝が絶えません。
VSCodeはバージョン管理として標準でGitに対応しています。
なのでVSCodeで手軽にソースを管理する場合Gitプロジェクトにして使っているのですが、たまに開発当初はGitでバージョン管理していたけれど後からバージョン管理の必要なかったと思いなおしたファイルとか、間違ってcommitしたとか、プロジェクトによって自動生成されるファイルをcommitしてしまってプロジェクトを実行するたびに差分ファイルができて困る、てなことがあります。
きっちりと構成を考えてからプロジェクトを作るとか、自動生成されるファイルはプロジェクト以外の場所に生成するべきとかの御意見もあるでしょうが、ノリで作業をしていると気付いたらそういった状況になっているのです。少なくとも私はそうなのです。困ったことですが( ゚Д゚)
そうした場合の一般的なアプローチとしては .gitignore ファイルを用意する、というのがあります。
.gitignore ファイルはGitの機能の一つでバージョン管理から除外するファイル、またはディレクトリを制御するために記述するファイルで、プロジェクトのrootフォルダに配置します。
ただ、.gitignoreにすでにGitの管理下にあるファイルを記述したとしても、該当ファイルの変更を無視してくれません。
これが全てのGitで起こる現象なのか、VSCodeのGitでのみ起こる現象なのか、おま環なのか判断できないのでそのあたりはご寛恕の上お読みください。
VSCodeではGit用のプラグインGitLens、Git History を使用しています。
対処法その1
私がやっていた対処法として該当ファイルを一旦削除してcommitする、というのがあります。
commitした後に同名のファイルを追加しても.gitignoreに従って無視されるので、目的を達成できます。
まあ、ファイル自体を削除するのでそのファイルがプロジェクトに必要な場合は使えない対処法になります。
対処法その2
たぶんこっちが正道だと思いますが、gitコマンドを使用して該当ファイルを管理下から削除します。
プロジェクトに追加(add)されたファイルはgitの管理下にindex情報がキャッシュされます。
gitの管理下から該当ファイルを外すにはindex情報から該当ファイルの情報を削除する必要があります。
プロジェクトのルート(.gitフォルダーがある場所)に移動して以下のコマンドを実行します。
git rm --cached ファイル名
rm はリムーブ(削除)コマンド、--chched オプションを付けることで、プロジェクト管理下のファイルは削除されず、インデックス情報(gitキャッシュ)が削除されます。
該当ファイルが削除状態(gitインデックスから削除されただけでファイル自体はそのまま)になるのでcommitします。
その後は .gitignoreに従って無視されるので、目的を達成できます。
該当ディレクトリ(とその配下)を管理下から外したい場合は
git rm -r --cached ディレクトリ名
-r オプションは再帰(リカーシブ)指定で、該当ディレクトリ配下を再帰的に削除してくれます。
ちなみに --cached オプションを付け忘れると、インデックスだけでなく本体のファイルも削除されます(対処法1をコマンドでおこなった状態になる)。
あまり使う機会はないかもしれませんが、プロジェクトをひとつのディレクトリ配下にまとめていると、意外と起こる事態な気がします。
私の環境は基本的にローカルで完結してるので、サーバー上で運用している方はcommit後にpushするのを忘れずに(`・ω・´)