lfs
3 min
GitHubの大きなファイル
最近作業中によくこのエラーに遭遇します:
fatal: sha1 file '
実は原因はGitHubが最大100MBまでしかサポートしていないからです。普段のコードには十分ですが、HDFやNCファイルがあると無理です。
https://git-lfs.github.com/ からLFSをインストールした後、コマンドライン(PyCharmは使えないようです)で操作できます。
実は一番良い方法はデータファイルを別々に保存することですが、途中で一度commitした時にファイルも一緒に追加してしまい、パスを変更しても一緒にpushされてしまいます。
仕方なく、まずアップロードしてからパスを移動し、その後commitしてpushするしかありませんでした。
また、LFSにも制限があり、1GBまでしかアップロードできず、それ以上は有料です。本当に面倒です。
今のところ、より良い方法は見つかっていません。
BFG Repo-Cleaner
より良い方法がちょうど見つかりました。
このページで見つけました。
すでにGitHubにファイルをアップロードしてしまった場合は、BFGをダウンロードできます。
そして:
$ git clone --mirror git://example.com/some-big-repo.git
$ java -jar bfg.jar --strip-blobs-bigger-than 100M my-repo.git
$ git gc --prune=now --aggressive完了です。
この方法にはJREが必要なことに注意してください。
git-filter-branch
しかし上記の方法は私にとっては無限ループです。
ファイルが大きすぎてGitHubにpushできないからです。
だからそのmirrorをcloneしてcommitをクリーンにする方法が使えません。
別の方法は:
$ git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch *.HDF" -- --all私の場合、大きなファイルは全部HDFだとわかっているので、ワイルドカードを使えばいいです。
そして:
$ rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --prune=now
$ git gc --aggressive --prune=now最後に全部pushします:
$ git push --all --force