こんにゃくの勉強記

プログラミング好きなとある大学生の勉強メモ的な、日記的なものです

【Github】100MBを超えるファイルをpushする - Git Large File Storage

はじめに

Github で 100MB を超えるファイルを push しようとすると、↓のように怒られてしまい、push できずに終わってしまいます。

100MB を超えるファイルを push しようとしたときのエラーのスクショ
エラー内容
50MB を超えると Warning が出て、100MB を超えると Error になるようです。

そもそも、100MB を超えるようなファイルを Git で管理すべきなのか、とも思いますが、ここでは Git Large File Storege を使って Git で管理する場合の方法を紹介したいと思います。

Git Large File Storage (LFS)

概要

Git Large File Storage (LFS) を使うと、100MB を超えるファイルも管理することができます。ざっくり言うと、リポジトリ実際のファイルではなくファイルへの参照を保存することで管理します。実際のファイルは別のどこかに保存され、リポジトリには実際のファイルへのポインタファイルが格納されます。

「別のどこか」がどこなのか気になるのですが、公式ドキュメントには書いていなさそうでした。GitKraken のドキュメントには「カスタムサーバーかGithub, GitLab, BitBucket などの組み込み LFS ストレージ」と書いてあり、stack overflow の質問では、リモートのURLから git@github.com:foo/bar.git -> https://github.com/foo/bar.git/info/lfs というような規則で指定された場所に格納されると書かれていました。

使い方

インストール方法

公式の Github リポジトリに各環境ごとの Git LFS インストール方法が記載されています。私は Mac なので、 $ brew install git-lfs でインストールできました。

Linux であれば Debian パッケージや RPM パッケージとして配布されており、 Windows であれば Git for Windows に初めから含まれているようです。

github.com

push 方法

100MB を超えるファイルをコミットしてしまっている場合は、まず下記のようにコマンドを叩いてコミットを取り消します。

$ git reset --soft HEAD^

コミットしていない場合は、この操作はしなくて大丈夫です。

次に、Git LFS のセットアップを行います。これは 1 アカウントで 1 回行うだけでよく、リポジトリごとに行う必要はありません。

$ git lfs install

セットアップできたら、 Git LFSLFS で管理したいファイルを登録し、 .gitattributes を git add します。

$ git lfs add <100MB 超えのファイル名>
$ git add .gitattributes

.gitattributes は、特定のファイルや拡張子ごとに適用する設定を記述するファイルのようなもので、ここでは $ git lfs add <ファイル名> を行った際に自動的に Git LFS の設定が追記されるため、その変更を git add します。

ここからはいつも通りの操作を行うだけです。

$ git add <100MB 超えのファイル名>
$ git commit -m "コミットメッセージ"
$ git push

Git LFS への登録を行うのは初回のみでよいため、次からは普通に add や commit するだけで大丈夫です。

ストレージと帯域の制限

2023年9月19日時点では、無料アカウントでは Git LFS の無料ストレージは 1GB、無料帯域は 1GB/月 となっており、これらを超えて Git LFS を使用する場合は追加料金が必要となっています。 現在は 5ドル/月 で 50GB のストレージと帯域を購入できますが、2023年10月1日から Git LFS の課金モデルが変わるため、公式からの情報を参考にした方が良さそうです。

docs.github.com

参考