I taught a bucket to speak git
A developer built objgit, a Git server backed by object storage (Tigris) using a pure-Go Git library. Storing repos in S3-compatible buckets required workarounds for atomic renames, latency from excessive stat/list calls, and packfile handling, ultimately showing both the viability and challenges of Git-on-object-storage.
Background
- **Tigris**: cloud object storage (like S3). The author works there and experiments with making it act like a filesystem.
- **go-git**: a pure-Go library that handles Git internals without needing the actual `git` binary. It stores data through **billy**, a filesystem abstraction layer.
- **Object storage** stores data as flat "objects" in a bucket, not files in directories. It lacks atomic rename and fast metadata lookups — things Git's on-disk format assumes from a local disk.
- The author built **objgit**: a Git server that stores repos entirely in a Tigris bucket, not on a local filesystem. Goal: make Git repos stateless and cloud-native.
- Core challenges: Git's atomic-rename strategy breaks on object storage; pushes over SSH create deadlocks with packfile streaming; cloning triggers thousands of HTTP round trips for metadata checks that would be microsecond-level syscalls on local disk.