Skip to content
Latchkey

Git LFS とは?

Git LFS(Large File Storage)は、リポジトリ内の大きなファイルを小さなポインタに置き換え、実際のデータは別のストレージに保管します。

Git はテキスト向けに作られており、動画・データセット・デザイン素材のような大きなバイナリファイルを苦手とし、それらは履歴を肥大化させ、すべての clone を遅くします。Git LFS は、そうしたファイルをメインの履歴の外に保管し、その場所に軽量なポインタを残すことでこれを解決し、リポジトリを軽量に保ちます。

Git LFS の仕組み

どのファイルパターンを管理するかを LFS に指定します。それらのファイルについて、Git は履歴に小さなテキストのポインタを保存し、実際の内容は専用の LFS ストアに置かれます。チェックアウト時に LFS がポインタを実際のファイルに入れ替えるため、体験はシームレスに感じられます。

Git LFS のセットアップ

LFS をインストールし、ファイルタイプを追跡し、生成された設定をコミットします。

Tracking large files
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 オブジェクトを取得しないと、実際のファイルではなくポインタを見ることになります。

関連ガイド