Git Large File Storage(LFS)は,GitHubによると,Gitワークフロー内での“オーディオサンプルやデータセット,グラフィック,ビデオなど,大容量のバイナリファイル組込み”の改善を目的とした,オープンソースのGitエクステンションである。
広く知られているようにGitは,ことバイナリファイルの格納に関しては,効率的であるとは言えない。その理由は,
gitは,デフォルトでは,バイナリ資源のすべてのバージョンを圧縮して保存しようとします。数の多い場合には,これが最良な手段でないことは明らかです。
Git LFSの大容量バイナリファイル処理に対するアプローチは,それを“テキストポインタ”,つまりバイナリファイルを識別する情報を格納したテキストファイルに置き換えることにある。テキストポインタがGit内部に格納されるが,大容量ファイルそのものは[0}Git LFSサーバにHTTPS経由でホストされる。
Git LFSは,lfs
コマンドを新たに追加してGitを拡張する。コマンドには次のオプションがある。
- config: Git LFSの設定を表示する。
- init: Git LFSを初期化する。
- logs: git-lfsからのエラーを表示する。
- track: 大容量ファイルをGitリポジトリに追加する。ファイル拡張子の指定が可能。
- untrack: Git LFSからファイルを削除する。
- push: 追跡ファイルをGit LFSのエンドポイントにプッシュする。
- status: 変更されたGit LFSオブジェクトのパスを表示する。
大容量ファイルを既存のリポジトリに追加したければ,次のような指定をすればよい。
git lfs track "*.pdf"
git add file.pdf
git commit -m "Add design file"
git push origin master
GitHubによれば,Git LFSサーバAPIの現時点での実装は,参照実装サーバと,まだ運用されていないGitHub.comの2つのみである。GitHubはすでに,“1GBのフリーストレージと,1ヶ月1GBまでの帯域割り当て”を備えた,LFSの無償提供の計画を発表している。それ以上の割り当ては有料プランとして提供されるが,価格の詳細はまだ発表されていない。
Git LFS以前にも,Gitによる大容量のバイナリファイル操作は,git-annexを使うことで可能ではあった。git-annexは,ファイルの内容を.git/annex
に格納した上で,その位置へのシンボリックリンクをGitで適切に扱うという,Git LFSと同じようなアプローチを使用したエクステンションだ。