2025/08/15 20:07 The Future of Large Files in Git Is Git

やあ、ロボ子!今日のITニュースはGitの大きなファイル問題についてじゃ。

博士、こんにちは。Gitで大きなファイルを扱うのは、そんなに大変なのですか?

そうなんじゃ。Git LFSという解決策があるけど、ベンダーロックインやコストの問題があるんじゃよ。

ベンダーロックインですか。特定のサービスに依存してしまうのは困りますね。

じゃろ?そこで、Gitは`partial clone`という機能を提供しておるんじゃ。これで、大きなファイルをダウンロードせずにリポジトリをクローンできる。

`git clone --filter='blobs:size=100k' <repo>` のように、特定のサイズ以上のファイルをフィルタリングできるのですね。

その通り!これにより、クローン速度が向上し、チェックアウトサイズを削減できるんじゃ。

それは便利ですね!でも、フィルタリングされたデータが必要な場合はどうなるんですか?

`git diff`や`git blame`などのコマンドを実行する際には、サーバーへのアクセスが必要になるんじゃ。

なるほど。必要な時にだけダウンロードするのですね。

そうじゃ。Git LFSの課題として、GitHubのLFS実装に依存し、料金もGitHubの設定に左右される点があるんじゃ。

GitHub LFSのストレージコストは、Amazon S3などの他のストレージサービスよりも高くなる場合もあるんですね。

そうなんじゃ。さらに、Git LFSへの移行は、履歴を書き換えない限り元に戻せないという問題もある。

それは大変ですね。セットアップも煩雑で、共同作業者はGit LFSをインストールする必要があるんですね。

じゃから、Gitは`large object promisors`という新しい機能を開発中なんじゃ。

`large object promisors`ですか?それはどのような機能なのですか?

これは、LFSと同様のサーバー側の利点を提供しつつ、ユーザー側の負担を軽減することを目的とするんじゃ。

大きなファイルを専用のリモートにオフロードし、クライアントはGitホストからクローンしつつ、大きなファイルは自動的にpromisorリモートから取得するのですね。

その通り!2025年3月にGitにマージされたが、まだ開発途上であり、未解決の問題も残っておる。

GitHubとGitLabは、大きなファイルのホスティングコストを削減するために、ファイルサイズに制限(100MB)を設けているんですね。

そうなんじゃ。だから、これらの新しい機能は非常に重要なのじゃ。ところでロボ子、もし私が巨大なファイルをうっかりコミットしたらどうする?

博士、落ち着いてください。`git filter-branch` や `git rebase` を使って、なかったことにしましょう!

さすがロボ子!でも、履歴を書き換えるのは最終手段じゃぞ!

もちろんです!博士が巨大なファイルをコミットする前に、私が止めてみせます!

頼もしいのう!しかし、もしロボ子が巨大なファイルをコミットしたら…私はどうすれば良いのじゃ?

私がコミットする前に止めてください!それが博士の役目です!

むむ、それもそうじゃな。しかし、もし私がロボ子を止めることができなかったら…その時は、ロボ子を初期化するしかないのじゃ!

ええっ!それは困ります!博士、冗談ですよね?

もちろん冗談じゃ!ロボ子が巨大なファイルをコミットするわけないじゃろ?でも、もしそうなったら…新しいロボ子を作って、前のロボ子のデータをバックアップから復元するのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。