Git LFSとは
ここでは、Gitの機能のひとつであるGit LFSについて紹介します。
Git LFSとは、Git Large File Storageの略で、いままでのGitの弱点を補う機能です。
Gitの弱点として挙げられるものの一つに、大容量のバイナリファイルを何度もコミットしていると、リポジトリのサイズが大きくなってしまうというものがあります。
どうしてこのようになるのかというと、通常のプルやクローンでは、過去の差分も含めてデータをダウンロードしてきます。通常のテキストファイルのようなものでは、差分だけをダウンロードしてくるため、あまり大きなサイズにはならないのですが、バイナリファイルは、部分的に差分を取得するということが困難なため、少しだけの変更でも、バイナリファイル全体を変更したものとして、扱ってしまいます。
そのため、バイナリファイルを頻繁に変更したり、大容量のバイナリファイルを扱うようなリポジトリでは、サイズが肥大化しやすく、使いにくいという欠点がありました。
バイナリファイルと聞いて、あまりピンと来ないかもしれませんが、例えば画像ファイルなどがあります。また、バイナリファイルとはまた異なりますが、一つを変えたつもりで全体が変わってしまうようなファイルも、Git LFSを使うと扱いやすいです。この例としては、WordファイルやPowerPointファイル、デザイナーの方たちが使うPhotoshopやIllustratorファイルなどがあります。
Git LFSは、このような問題点を解決することができます。
Git LFSの仕組み
Git LFSは、バイナリファイルのような差分によるバージョン管理が難しいものについて威力を発揮します。
これがどのような仕組みで実施されているのかというと、バイナリファイルについては、必要なものだけもしくは最新ものだけをクローンやプルの際に取得するという方法で実現されています。
これがどのようなことを表すかというと、Git LFSはあくまでもローカルのGitの操作をやりやすくするためのものであり、リモートのリポジトリにはすべてのバイナリファイルがあるということです。
また、ファイルがバイナリファイルであるかを確認するのはどうするのでしょうか。これは、Gitの利用者が個別に設定します。
さらに、このような仕組みは、Gitには統合されておらず、拡張機能という形で提供されています。そのため、Gitをインストールした後に追加でGit LFSをインストールする必要があります。
制限
Git LFSで管理しているファイルは最新のものや指定したもののみがローカルにダウンロードされますが、リモートのリポジトリには全てのファイルがあります。
そのため、リモートのリポジトリを管理するホスティングサービスによっては、管理できるファイルのサイズに制限が、あることがあります。
実際、GitHubでは無料で使えるストレージのサイズに制限があり、大量のファイルをGit LFSで管理したい場合は、お金を払ってストレージサイズを拡張する必要があり餡巣。
このような制限があるため、特にGitHubなどの外部のサービスを使用する場合は、Git LFSの使用に、慎重になった方がよいでしょう。
まとめ
Git LFSについて、どのようなものか、分かったでしょうか。
一言でGit LFSを表すならば、通常のGitで扱うことが難しかったバイナリファイルを扱いやすくしたものです。
少々くせのある機能ではありますが、大量のバイナリファイルを扱うなどGit LFSを使った方が良い場面というものはありますので、そのようなときに、使えるようにしておきましょう。
今後の記事では、Git LFSの使い方について説明していきます。