Git LFS とは?
Git LFS(Large File Storage)は、リポジトリ内の大きなファイルを小さなポインタに置き換え、実際のデータは別のストレージに保管します。
Git はテキスト向けに作られており、動画・データセット・デザイン素材のような大きなバイナリファイルを苦手とし、それらは履歴を肥大化させ、すべての clone を遅くします。Git LFS は、そうしたファイルをメインの履歴の外に保管し、その場所に軽量なポインタを残すことでこれを解決し、リポジトリを軽量に保ちます。
Git LFS の仕組み
どのファイルパターンを管理するかを LFS に指定します。それらのファイルについて、Git は履歴に小さなテキストのポインタを保存し、実際の内容は専用の LFS ストアに置かれます。チェックアウト時に LFS がポインタを実際のファイルに入れ替えるため、体験はシームレスに感じられます。
Git LFS のセットアップ
LFS をインストールし、ファイルタイプを追跡し、生成された設定をコミットします。
git lfs install
git lfs track "*.psd"
git add .gitattributes design/logo.psd
git commit -m "Track PSD files with LFS"なぜ役立つのか
LFS がないと、大きなバイナリのすべてのバージョンが履歴に永久に保存されるため、clone は巨大かつ低速になります。LFS があれば、履歴には小さなポインタだけが保持され、大きなデータはオンデマンドで取得されます。これにより、メディアやバイナリで満ちたリポジトリでも clone を高速に保てます。
CI/CD における Git LFS
CI の runner は LFS オブジェクトを取得する必要があり、そうしないと build は実際の内容ではなくポインタファイルを見ることになります。チェックアウト action は、これらのオブジェクトを取得する LFS オプションを公開しています。LFS データは大きくなり得るため、取得は job の時間と帯域を増やします。バイナリを必要とする job でのみ有効化しましょう。
LFS をうまく使う
- 本当に大きい、またはバイナリのファイルだけを LFS で追跡しましょう。
- 追跡が共有されるよう .gitattributes ファイルをコミットしましょう。
- 素材を必要とする job のために CI で LFS の取得を有効化しましょう。
- ホストの LFS の帯域とストレージのクォータに注意しましょう。
重要なポイント
- Git LFS は大きなファイルを履歴の外に保管し、ポインタを残します。
- メディアやバイナリがリポジトリにあっても clone を高速に保ちます。
- CI は LFS オブジェクトを取得しないと、実際のファイルではなくポインタを見ることになります。