はじめに
GitHubのLFSのBandwidthは初期状態だと1GB/月です。
現在制作しているプロジェクトにおいてGitHub ActionsでCIを導入したのですが、Bandwidthをどんどん削っており、1GB/月を超えそうでまずい状況でした。
現在制作しているプロジェクトは大きいサイズのファイルがなくpngの容量が小さいファイルが多く、そもそもLFSで管理する必要性がそこまでなかったため、LFSで管理するのをやめる方法を調べました。
いくつか嵌ったので備忘録として残しておきます。
また、下記の手順を使った場合Bandwidthの削減には役に立ちますが、GitHubのリポジトリにあるLFSのファイルが削除されるわけではありません。
下記のページによるとGitHubのリポジトリにあるLFSのファイルを削除したい場合はリポジトリを削除して再作成するしかないとのことです。。
ファイルを Git Large File Storage から削除する - GitHub Docs
Git LFSの管理から特定の拡張子(png)のファイルを履歴含めて一気に消す手順
※注意:コミット履歴の改変やgit push -f 等の事故が発生しやすい操作を行うため、事故を100%起こしたくない場合は行わないようにお願いいたします。
下記では例としてpng拡張子での手順を記載しています。
・1:.gitattributes でのpngのLFSの設定を削除
変更前
*.png filter=lfs diff=lfs merge=lfs -text
↓
変更後
・2:BFGをダウンロード
下記リンクのDownloadからBFGのjarファイルを取得します。
現時点ではbfg-1.14.0.jarがダウンロードできます。
・3:BFGを用いてコミット履歴からpng拡張子のファイルを完全に削除しステージングエリアに
2でダウンロードしたBFGのbfg-1.14.0.jarをGitのリポジトリのルートに配置します。
git bash等を開き、下記コマンドを実行します。
java -jar bfg-1.14.0.jar --no-blob-protection --delete-files '*.png'
・4:ローカルのgitリポジトリからLFSのアンインストール
下記コマンドを実行します。
git lfs uninstall
・5:png拡張子の全ファイルをステージングエリアから一旦Gitの管理対象外にする
(※要検証:正確な内容ではないかもしれません)
下記コマンドを実行します。
git rm --cached *.png
ステージングエリアにあるファイルをGitの管理対象外にせずに再度コミットしてしまうと、LFS管理のままコミットされてしまうようです。
・6:LFS管理から外れたpngファイルを再度Git管理対象にする
git add -A git commit -m "LFS管理から外れたpngファイルを再度追加"
下記コマンドでLFS管理のファイル一覧を確認することができ、pngが管理から外れているかどうかを確認できます。
git lfs ls-files
・7:git pushする
下記コマンドを実行します。
git push -f
コミット履歴の改変が行われているため、pushの際に-fをつける必要があります。
参考
ファイルを Git Large File Storage から削除する - GitHub Docs
機密データをリポジトリから削除する - GitHub Docs