.gitignoreに記載したのにnode_modulesがいつまでもpushされてしまう。
はじめまして、Yuiです。
私は現在Vue.jsを使って受託開発を行っているのですが、そこで詰まったことを紹介します。
何が起こったか
Vueで書いたコードをBitbucketにpushした際、node_modulesが.gitignoreに書かれてあるにも関わらず、まとめてpushされていた。
.gitignoreを見直してもきちんとnode_modulesの記載があり、しばらく原因がわからなかった。
原因
どうやらキャッシュが原因だった。
7/22追記 kmdkukさんよりコメントを頂き、原因がキャッシュではないことがわかりました。すでにgitの追跡対象になっているファイルはどんだけignoreしようとしても追跡対象から外さないとコミット履歴が残ってしまうようです。私はその部分をまとめてキャッシュと呼んでいました・・・・。すみません!
試したこと
とりあえず、いかなる条件でもignoreするように .gitignoreに
*node_modules/
と記載した。
そしてその後
$ git add .gitignore
$ git commit -m "comment"
$ git push origin hoge_branch
これで解決!
と思いきやまだ残ったままだった・・・。
解決法
$ git rm -r --cached node_modules
$ git rm -r --cached node_modules
ここにたどり着くまでの経緯は以下
*node_modules/
こう書いても消えないということは、キャッシュの可能性が高いと思い、キャッシュを全削除してみた。
7/22追記 kmdkukさんのコメントより引用
すでにgitの追跡対象になっているファイルはどんだけignoreしようとしても追跡対象から外さないと変更履歴を永遠と追跡してコミット履歴に残ってしまいます.
その追跡対象から外すコマンドがgit rmコマンドです.
これにrオプションを付けることで再帰的にフォルダ以下のファイルを対象から外してくれます.
cachedオプションは,追跡対象から外したときに,ファイルをそのまま残してくれるようにしてくれるオプションです.
つまり、下記のように消すと今まで追跡するべくして追跡してたファイル郡までaddし直す羽目になるそうなので、きちんとファイル名を明示する必要があるらしいです。
(この辺もざっくりとは認識していたのですが、もう一回addすればよいかと思い、あまり重要視していませんでした。)
ですので、
$ git rm -r --cached .
ではなく、
$ git rm -r --cached node_modules
とファイル名を明示的に指定する方が良いです。
感想
なにか挙動がおかしいときはキャッシュをチェックするということを忘れないようにしたい。
kmdkukさん、本当にありがとうございました。
Author And Source
この問題について(.gitignoreに記載したのにnode_modulesがいつまでもpushされてしまう。), 我々は、より多くの情報をここで見つけました https://qiita.com/yuikoito/items/1a725ff1507b0134b27a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .