I taught a bucket to speak Git
3 hours ago
- #Git
- #Object Storage
- #Go
- The author developed objgit, a git server that stores repositories directly in object storage buckets, eliminating the need for local disk storage and the git binary.
- By leveraging go-git and the billy filesystem abstraction, the author taught a Tigris bucket to mimic a filesystem, enabling git operations to function over object storage.
- Git's storage model uses immutable, content-addressed objects (blobs, trees, commits, refs), making it compatible with append-only object storage systems like Tigris.
- Traditional git servers rely on local filesystems, creating single points of failure; objgit decentralizes storage using object storage for improved resilience.
- The author addressed challenges like implementing atomic renames (using Tigris's RenameObject extension) and reducing latency from excessive API calls (e.g., stat, ListObjectsV2).
- Optimizations included caching pack files locally to speed up clones and modifying transport layers to handle packfiles efficiently, reducing round trips.
- Post-receive hooks are supported in a sandboxed environment (using kefka), enabling automated workflows like deployments, though policy enforcement is not yet implemented.
- Future plans include integrating CI/CD pipelines (e.g., Kubernetes, Tekton), adding a web UI, and improving performance and stability for production use.
- Objgit is an experimental project, emphasizing its potential for stateless, scalable git hosting while cautioning against production use without further testing.