ある案件で、画像ファイルを含めたリポジトリ全体のサイズが1GB以上ありました。その際に使った、Git Large File Storageについて紹介します。
Git Large File Storageとは
Git Large File Storage (Git LFS)とは、音声、動画、高画質な画像など、大容量ファイルをバージョン管理するためのGitの拡張機能です。Git LFSでは、大容量ファイルは別のストレージに格納され、Gitリポジトリには実際のファイルの代わりに「ポインタ」が格納されます。ポインタは、実際のファイルへの参照として機能します。
バイナリデータをバージョン管理しようとすると、Gitリポジトリが肥大化したり、Gitの処理(git clone、git push、git pull)に時間がかかったりしてしまいます。Git LFSを使うと、これらの問題が解決します。
どんな時にGit Large File Storageを使うのか
ファイルのサイズについて、GitHubのページには次のように書かれています。
If you attempt to add or update a file that is larger than 50 MB, you will receive a warning from Git.
About large files on GitHub – GitHub Docs
[日本語訳]50MBを超えるファイルを追加・更新しようとすると、Gitから警告が表示されます。
また、リポジトリのサイズについても次のように記載されています。
We recommend repositories remain small, ideally less than 1 GB, and less than 5 GB is strongly recommended.
About large files on GitHub – GitHub Docs
[日本語訳]リポジトリは小さく保ち、理想としては 1GB 未満、および 5GB 未満にすることを強くお勧めします。
以下のいずれかに該当する場合、Git LFSを導入したほうが良さそうです。
- リポジトリ内に50MB以上のファイルが存在する
- リポジトリ全体のサイズが1GB以上
Git Large File Storageのインストール
MacOSの場合
MacOSを使用している場合、Homebrewを使って下記のコマンドを実行します。
$ brew install git-lfs
その後、下記のコマンドを実行します。
$ git lfs install
> Git LFS initialized.
Windowsの場合
Git for WindowsにはGit LFSが含まれています。そのため、Git for Windowsをインストールしている場合は、改めてGit LFSをダウンロードする必要はありません。
コマンドプロンプトを開いて、下記のコマンドを実行します。
$ git lfs install
> Git LFS initialized.
管理するファイルの設定
ここからの設定はリポジトリごとにおこなう必要があります。
Git LFSで管理したいファイルを指定します。例えば、.mp4
ファイルを管理したい場合は、下記のコマンドを実行します。
$ git lfs track "*.mp4"
> Tracking "*.mp4"
指定したファイルの拡張子は、.gitattributes
ファイルに次のように書き込まれます。
*.mp4 filter=lfs diff=lfs merge=lfs -text
この.gitattribute
ファイルをプッシュすれば設定は完了です。
ここでは、特定の拡張子のファイルをすべてGit LFSで管理する場合を例に紹介しました。この他にもファイルの指定方法はいくつかあります。詳細はBacklogのサイトに記載されていますので、ご参照ください。