画像を含めると1GB以上あったので、Git Large File Storageを使ってみた

2020年9月4日

リポジトリのサイズ制限

Gitのリポジトリのサイズについて、GitHubのページには次のように書かれています。

リポジトリは小さく保ち、理想としては 1GB 未満、および 5GB 未満にすることを強くお勧めします。

また、Bitbucketのページにも以下のような記述があります。

リポジトリが1 GB よりも大きい場合、Bitbucket の利用方法を見直すことをおすすめします。

GitHubとBitbucketのどちらのホスティングサービスを使ったとしても、Gitのリポジトリは1GB未満にするのが望ましいようです。

ある案件でバージョン管理しようとしていたファイル全体のサイズが1GBを超えていました。そのうち、画像などのバイナリデータがほとんど占めていました。そこで、Git Large File Storageを使うことにしました。

Git Large File Storageとは

Git Large File Storage(Git LFS)とは、音声、動画、高画質な画像など、大容量ファイルをバージョン管理するためのGitの拡張機能です。Git LFSでは、大容量ファイルは別のストレージに格納され、Gitリポジトリには実際のファイルの代わりに「ポインタ」が格納されます。ポインタは、実際のファイルへの参照として機能します。

参照:https://git-lfs.github.com/
Icons made by Smashicons from www.flaticon.com

メリット

バイナリデータをバージョン管理しようとすると、Gitリポジトリが肥大化したり、Gitの処理(git clone、git push、git pull)に時間がかかったりしてしまいます。Git LFSを使うと、これらの問題が解決します。

Git Large File Storageの導入方法

ローカルマシンでの設定

手順1. Git LFSをダウンロードする

Git LFSをダウンロードします。

Macの場合
$ brew install git-lfs
Windowsの場合

Git for WindowsにはGit LFSが含まれているため、Git for Windowsをインストールした場合は改めてGit LFSをダウンロードする必要はありません。

手順2. Git LFSをインストールする

Macならターミナル、Windowsならコマンドプロンプトを開き、下記のコマンドを実行します。

$ git lfs install
Git LFS initialized.

これにより、.gitconfigファイルにLFSフィルタが追加されます。

[filter "lfs"]
    clean = git-lfs clean -- %f
    smudge = git-lfs smudge -- %f
    process = git-lfs filter-process
    required = true

リポジトリごとの設定

手順1. ローカルリポジトリにフックを追加する

Gitで管理したいディレクトリに移動し、以下のコマンドを実行します。

$ git lfs install
Updated git hooks.
Git LFS initialized.

手順2. Git LFSで管理したいファイルの拡張子を指定する

例えば、Git LFSで.pngファイルを管理したい場合は、下記のコマンドを実行します。

$ git lfs track "*.png"
Tracking "*.png"

指定したファイルの拡張子は、.gitattributesファイルに次のように書き込まれます。

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

同様の手順で、Git LFSで管理したいファイル(画像、音声、動画など)の拡張子を追加していきます。

手順3. .gitattributeファイルをコミットおよびプッシュする

SourceTreeを使って、.gitattributeファイルをコミットして、プッシュします。

まとめ

最近、動画コンテンツを埋め込んだWebサイトをよく見かけるようになりました。動画ファイルもGitでバージョン管理していくとなると、今回紹介したGit LFSが役に立ちます。今後、Git LFSのニーズが増えていくと思います。