はじめに
gitを用いて開発を行うときに、画像、動画、音声、巨大なバイナリファイル等をgithubに上げたくなる場合があります。
しかし実は、githubに上げられるデータには制限が設けられています
具体的には、
・100MBを超えるfileはpush出来ない
・レポジトリあたり5GBまでのデータしかpush出来ない
という制約があります。
しかし、画像、動画、音声、バイナリファイルで100MBを超えるデータは多く、このようなデータをgithubに上げられないのはとても不便です。
そこで、Git LFSという拡張機能を利用することによってこのような問題を解決することができます。
Git LFSとは
Git LFSとはGit Large File Storage (LFS)のことで、巨大なファイルをGitのポインターファイルに変更する機能です。
つまり、巨大なファイルをGitに上げて、Gitのファイルが保存されている場所のポインターを巨大なファイルと入れ替える機能です。
Git LFSを使うことによって本来はgitに上げることができないファイルをgitで管理することができるようになります。
git lfsを使用するためには、
git lfs install
をPowerShellに打ち込んでください。
Git LFSでファイルを管理したい場合は、
git lfs track "<管理したいファイル>"
をPowerShellに打ち込んでください。管理したいファイルはワイルドカードで指定することができます。
コマンドを打ち込むと.gitattributesというファイルが追加されます。
このファイルにはGit LFSで管理されるファイルが書かれており、このファイルを削除するとGit LFSでのファイル管理が解除されます。
Git LFSで管理してるファイルの管理をやめたい場合は、
git lfs untrack "<管理をやめたいファイル>"
をPowerShellに打ち込んでください。
Git LFSに制限があるのか
では、Git LFSを使用すれば無料で巨大なファイルを無制限にGitに上げることができるのでしょうか?
残念ながら、Git LFSには制限がつけられています。
まずGit LFSでも5GiBを超えるファイルは保存することが出来ません。5GiBを超えるファイルを保存しようとするとサイレントに拒否されるそうです。
・無料のストレージは1 GiB
・無料帯域は1 GiB/月
これらは、レポジトリ単位でなく、アカウント毎にカウントされます。
順に説明していきます。
ストレージについて
全てのユーザーは無料のストレージを1 GiBを持っています。
これは簡単に言うと、合計1 GiBのファイルをGit LFSにアップロードすることができるということです。
しかし、これには注意が必要で他の人が自分のリポジトリにプッシュしたときもリポジトリの所有者である自分のストレージが消費されます。
また、注意すべきこととして、同じファイルでも変更を加えてもう一度プッシュすると、ファイルのサイズ分もう一度ストレージから消費されます。
帯域について
全てのユーザーは無料の帯域を1 GiBを持っています。
これは簡単に言うと、合計1 GiBのファイルをGit LFSからダウンロードができるということです。
しかし、これには注意が必要で他の人が自分のリポジトリをプルしたときもリポジトリの所有者である自分の帯域が消費されます。
また、注意すべきこととして、所有者がファイルに変更を加えた後、もう一度プルするとファイルのサイズ分もう一度帯域から消費されます。
ストレージと帯域の回復
帯域は毎月無料使用枠が回復します(繰り越しはしません)。しかし、ストレージは課金をしないといつまでも回復しません。
Githubに巨大ファイルを共有する前提で開発するとなるとそれ相応のお金がかかる事になります。
おわりに
Git LFSを使い始めた当初は、いくらでもGitに巨大なファイルを上げることができると思っていましたが、githubも営利企業である限り、そんなことはありませんでした。
世の中そんな甘くないですね...