I've been thinking about circling back to improve it. Right now one of the major limitations is that it uses a filesystem abstraction as the main bridge from git to object storage. I really wanted to see how far I could go by kitbashing parts together from software I'd already made. Turns out you can go pretty damn far!
Turns out this is kind of a horrible idea in practice in ways that only really turn up when you try to square peg -> round hole as hard as I did (pushing gcc.git took multiple hours due to filesystem iops latency, turns out a thing designed for nanoseconds of latency copes poorly with a setup that has milliseconds of latency). I'm probably going to end up using the filesystem as a staging area and then have the git server asynchronously unpack git objects into individual S3 objects. I'm still not sure how to best implement merging or other git operations, but this is just kind of a hard problem in practice.