概要説明します。
需要あるかわかりませんが、最近はGitHubも勉強しているため、自己啓発かねて書いていきます。
- Git LFSの説明
- GitHubの場合(使い方や制限等)

以下、目次となります!
Git LFSとは?
最初にGit LFSについて簡単に説明します。
- Gitは大容量ファイルの管理は不得意。
- Git内ではURL(ポインタ)だけ管理して、実体は別の場所に格納しよう。

え、これだけ?

はい。
不得意という言葉に対する具体的な症例として、操作が重くなるというのが一番でしょうか。(Gitにおいて管理ができなくなるってわけじゃありません。)
けど、GitHub、Gitlab、Backlog等のGitホスティングサービスでは、Gitリポジトリに大容量ファイルを突っ込まれても困るのか、容量制限があります。
→ 1ファイル辺りの容量制限(100MB等)があるため、LFSを使わざるを得なかったり、大容量ファイルを諦めたり、大容量ファイルは別のDropboxサービスで管理って流れになります。
GitHubの場合
GitHubでLFSについて
公式サイトの関連記事はこの辺りでしょうか。

数値関係をまとめておきますね(2023年時点)。
プラン | 1ファイル辺りの容量制限 | LFSストレージ | LFS帯域 | LFS利用時の 最大ファイルサイズ |
---|---|---|---|---|
Github.com (Free) | 100MB以上はだめ。 | 1GB | 1GB | 2GB |
Github.com (Team) | 100MB以上はだめ。 | 1GB | 1GB | 4GB |
GitHub enterprise Cloud | 100MB以上はだめ。 | 1GB | 12GB | 5GB |
GitHub enterprise Server | 特になし。 (設定値を設けることも可) | ー | ー | ? |
GitHubだとPublicリポジトリだと色々な機能が無償で使えることがありますが、LFSはPublicリポジトリでもPrivateリポジトリと同じ制限です。
Enterpriseの場合はOrganizationの合計値になります。
以下はLFSに関する警告やエラー例です。
GitHub Desktopを利用している場合、コミット段階で次の警告が表示されます。

警告を無視してコミット後にプッシュすると、アップロードが終わった段階でErrorが表示されます(すぐにErrorにならない)。

なお、公式マニュアルによると、ファイル容量50MBを超えた段階で、GitHubから警告がくるようです。
LFSストレージ
LFS対象となったファイル置場の最大容量です。
例えば、100MBのファイルを10個格納したら一杯です。
LFS帯域
LFSストレージからファイルをダウンロードした容量のことです。
「LFSサーバ」 → 「自分のPC」
等の転送時にLFS帯域を消費します。
例えば、100MBのファイルを10個アップロードする分には問題ありませんが、100MBのファイルを10個ダウンロードすると、すっからかんです。

Publicだとやばいかな?

一般利用者のダウンロードですぐに消費かな。
データパック
LFSストレージやLFS帯域は「データパック」を購入することで追加出来ます。

1パック5USD
- 50GBのLFSストレージ
- 50GBのLFS帯域
です。

Enterpriseの場合は、年間購入っぽいです(実際に購入したことは無くてEnterpriseを試験運用したときに確認)。

LFSのサーバについて
自前で準備も出来るようです。
例えば、LFSサーバをAWSのS3とする場合ですね。
→ 詳しくはググると、先輩方の実施記事がいくつも見つかりました。
けど管理を気を付けないと、面倒な割に、それなりに高額になるかも・・・。
S3ファイルのダウンロードがインターネットになる場合、データパックを購入するのと同じぐらいのコストです。
操作例
LFSをサポートしているGitホスティングサーバは結構ありますが、今回はGitHubを使いました。
初期設定
git lfsを導入していない場合は、別途導入しましょう。
Windowsであれば、以下からGitをデフォルトでインストールすれば入ります。
<リポジトリ内で初期設定>
$git lfs install
Updated Git hooks.
Git LFS initialized.
<対象ファイルを設定>
$git lfs track "*.exe"
Tracking "*.exe"
→ .gitattributesが生成されます。
この段階で関連ファイルをコミット&プッシュすれば準備完了です。
これら操作は代表者が最初に行えればOKです。
Cloneの挙動
GitHub Desktopの場合、LFSファイルも自動的にダウンロードされました。
大容量のLFSファイルも使うのであれば良いのですが、不要な場合、LFS帯域の節約のためにダウンロードしたくありません。
次のようなコマンドを実行しておくと、LFSファイルはポインタしかダウンロードしません。
$ git lfs install --skip-smudge
Git LFS initialized.
$ git config -l
→ filter.lfs.smudge=git-lfs smudge --skip -- %f
があれば設定OK
上記コマンドはリポジトリ内(.git)のフォルダじゃなくてOKです。
後から、ダウンロードしたい場合は、次のコマンドを実行します。
git lfs pull [ファイル名]
また、やっぱり最初から全部ダウンロードする設定に戻したい場合は、次のコマンドを実行します。
$ git lfs install
Git LFS initialized.
$ git config -l
→ filter.lfs.smudge=git-lfs smudge -- %f
その他
◇GitHubでLFS帯域やストレージの制限を超えるとエラーが表示されます。
batch response: This repository is over its data quota. Account responsible for LFS bandwidth should purchase more data packs to restore access.
Uploading LFS objects: 0% (0/1), 0 B | 0 B/s, done.
error: failed to push some refs to 'https://github.com/...git'

◇LFSファイルのダウンロードフェーズで「x509: certificate signed by unknown authority」が表示されてダウンロード出来ないことがありました(企業内だと多い?)
セキュリティ的によろしくありませんが、暫定で
git config –global http.sslverify false
とすることで回避出来ます。
git cloneの時にダウンロードしたくありません。
まとめ
Git LFSに関する簡単な説明及び、GitHubでのLFSに関してざっくりとご紹介しました。
- 100MB以上のファイルはLFSの仕組みを使わないと管理出来ない。
- LFSにはストレージや帯域の制限があるため計画的に。

最後までご覧いただきありがとうございました。
コメント