おがみたは衰退しました

プログラミング系の備忘録など

Git LFSの管理から特定の拡張子のファイルを履歴含めて一気に消す方法

はじめに

GitHubLFSの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 でのpngLFSの設定を削除

変更前

*.png filter=lfs diff=lfs merge=lfs -text

変更後




・2:BFGをダウンロード
下記リンクのDownloadからBFGのjarファイルを取得します。
現時点ではbfg-1.14.0.jarがダウンロードできます。

rtyley.github.io

・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

Git LFS での管理を停止する - Vがいる日々

Git LFS管理しているファイルを通常のGit管理に戻す方法|nanase|note

notchained.hatenablog.com

Unityでガイスターを作って、原始モンテカルロ法のAIを実装した

ドイツで考案されたボードゲームであり、ゲーム理論において二人零和有限確定不完全情報ゲームに分類されるガイスターをUnityで作りました。
このページで遊べます→ガイスター(Geister) | UnityGameUploader

f:id:ogamita777:20150608020816p:plain

今回、合法手の中からランダムで1つ選択するAIと思考時間が1秒と5秒の原始モンテカルロ法のAIの計3つを実装し、100回ずつ対戦させてみました。原始モンテカルロ法は簡単に言うと、ランダムなシミュレーションを用いて最も勝つ確率が高そうな手を算出するアルゴリズムです。

対戦結果

先手 対戦結果 後手
ランダム 53 - 47 ランダム
原始モンテカルロ法(1秒) 82 - 18 ランダム
原始モンテカルロ法(5秒) 92 - 8 ランダム
原始モンテカルロ法(1秒) 21 - 79 原始モンテカルロ法(5秒)

考察と展望

原始モンテカルロ法のAIは思考時間が数秒単位の間は時間が長いほど強くなりそうです。思考時間を長くしても強くならない頭打ちがあると考えられますが、それを調べようとすると膨大な時間が掛かりそうなのでやりません(原始モンテカルロ法(1秒) VS 原始モンテカルロ法(5秒) の結果を出すのに半日ほど掛かってます..)。
時間があれば、原始モンテカルロ法を発展させたUCT*1などのアルゴリズムを実装したAIを作ってみたいと思います。