bundle-uri は Git の新機能で、キャッシュされたファイルをダウンロードしてプロジェクトデータを事前に埋めておき、その後サーバーとの複雑なフェッチ処理を減らす
- 通常、
git clone コマンドはサーバーとネゴシエーションを行い、必要なデータをダウンロードする → 非効率になることがある
bundle-uri は CDN からキャッシュ済みの初期データを取得し、その後はサーバーから最新状態だけを更新するようにする → 時間短縮が期待できる
クローンは速くなるのか?
Yes? - 速くなることもある
- ローカルファイルオプションを使うと、クローン速度は非常に速くなる
- VM にマウントされたファイルシステムやクラウドキャッシュ上のバンドルファイルを使うと、より高速に同期できる
No? - むしろ遅くなることもある
- 同じデータを CDN から受け取れば速そうに思えたが、実際にはむしろ遅かった
- 実験結果: バンドルを使ったクローンは通常のクローンより遅い
- 通常のクローン: 2分36秒
- バンドル使用クローン: 3分20秒
- バンドルですでに受け取ったオブジェクトが再度ダウンロードされる問題が発生した
Maybe? - そうかもしれない
- Git がバンドルファイルから
refs/heads(ブランチ参照)だけを読み取るため、問題が起きていた
- それ以外の参照は無視されるため、サーバーから追加データをダウンロードすることになる
- Git のコードを修正してすべての参照をコピーするようにすると、クローン速度は改善する
- 修正後のクローン時間: 2分19秒(元の2分36秒より高速)
- 追加でダウンロードしたオブジェクト数: 43,877個(全体の約1%)
修正方法とパッチ適用
- Git の
bundle-uri.c コードで、refs/heads 以外の参照を無視する部分を修正
- 修正後はすべての参照をコピーするよう変更 → クローン速度が改善
- この修正は 6文字の変更 だけで実現した最小限のパッチだった
この機能を使うべきか?
possibly - おそらく役に立つこともある
- GitHub や GitLab のようなプラットフォームでは、サーバー CPU 負荷を減らせる大きな利点がある
- サーバーで直接 packfile を計算せずに CDN 側で処理できる → サーバー資源を節約
- 個人ユーザーにも有用なケース:
- 社内 Git サーバーで大規模クローンを繰り返す必要がある場合
- CI/CD システムで繰り返しフルクローンが必要な場合
現実的には強制される可能性が高い
- 最新の Git プロトコルでは、サーバーがクライアントにバンドル URL を提供できる
- サーバーがバンドルファイルの URL を提供すると、クライアントは自動でダウンロードして同期を進める
- GitHub などでこの機能が有効化されれば、ユーザーに選択の余地はない
結論
- バンドルファイルを使うとクローン速度が速くなる可能性はあるが、Git の処理方式のため、当初はむしろ遅くなることもある
- Git のコードを修正して参照処理の方法を改善すれば、クローン速度は向上する
- 今後 GitHub、GitLab などがこの機能を導入すれば、クライアント側で自動的に使われる可能性が高い
まだコメントはありません。