Gitをオブジェクトストレージで動かすには、packfileを再発明する必要があった

You can run Git on object storage if you re-make packfiles

Tigris上でGitサーバーをオープンソース開発する著者が、packfileがローカルストレージ前提で設計されているためオブジェクトストレージでは性能が出ない問題に直面。インデックスからは圧縮後サイズが分からずHTTP Rangeリクエストも作れない。そこでカラムナストアを採用した独自のオブジェクトストレージネイティブなpackfile形式を発明し、本番規模のリポジトリで機能したと報告する。

ファイルシステムの読み取りはせいぜい10ナノ秒だが、ネットワークの往復は最低でも10ミリ秒かかる。現実の仕組み上、少なくとも100万倍遅いのだ。
  1. andrewaylett

    `git update-server-info` が味方です。これが、クライアントが pack に対して range リクエストを行えるようにするために必要な補助ファイルを生成してくれます。

    例えば: https://andrewaylett.github.io/rgitweb/ は、静的な git リポジトリに対して動作するリポジトリビューアです。pack をどこに保存しているかは気にせず、正しい range リクエストを行うためのデータがそこにあることだけを気にします。

  2. delf

    まさにこれが GitSocial のやっていることです: https://gitsocial.org/。さらに、リポジトリ用の静的サイトを生成できるので、全部をバケットから配信できます。

  3. flowingfocus

    最近、同じくオブジェクトストレージ上で git を扱う https://github.com/enroute-sh/enroute を見つけました。

    既存の forge をプロキシするところから始めて、後からオブジェクトストレージのバックエンドを採用するという git-proxy のアイデアが面白いと思いました。

  4. 0bytes

    3日間で4回目の投稿。これはマーケティングのスパムキャンペーンなのか?

  5. pierrebarre

    あるいは https://github.com/Barre/ZeroFS を使うだけでもいいですよ。

    git のワークロード、それも Linux サイズのツリーでもかなり素晴らしく動きます。

この日のほかの記事

2026-09-19