andrewayletta day ago
`git update-server-info` is your friend; it generates the auxiliary files needed to allow clients to make range requests against packs.
For example: https://andrewaylett.github.io/rgitweb/ is a repository viewer that runs against a static git repo. It doesn't care what you're storing the pack in, just that the data is there to make the right range requests.
delfa day ago
This is exactly what GitSocial does: https://gitsocial.org/. Plus it can generate static sites for repositories, letting you serve it all from a bucket.
Difwif18 hours ago
This seems incredible and I love the idea. Anyone using this for large projects? Any clear downsides or tradeoffs?
delf18 hours ago
Not that I know of as I don't have a way track this. I did test importing and mirroring everything for Ghostty and Meshtastic projects, found out that initial import and push steps may take a while.
Great to have issues, PRs, etc in git, but requires each participant to set up a fork to participate.
No CI though, but an extension to capture job logs is on the roadmap.
adastra2216 hours ago
Radicule does something similar. Also git-bug.
flowingfocusa day ago
I recently found https://github.com/enroute-sh/enroute which also does git on object storage
I found the idea of a git-proxy interesting where you start with proxying an existing forge and then later adopt the object storage backend
podviaznikov13 hours ago
yes! I tried to do exactly this here https://porcelain.sh/
never finished, because stopped having personal use case, but had exactly same idea(and a bit more features)
0bytesa day ago
4th submission in 3 days. Is this a marketing spam campaign?
bryanrasmussena day ago
It seems like the kind of thing I would naturally post if I came across it, so a bunch of submissions over 3 days makes me think a bunch of people saw it and when they saw it said huh, I will submit to HN.
I think that makes more sense than some spam campaign for this.
notpushkina day ago
I’m wondering how this is possible. Usually when you submit something that has been already posted recently, HN will upvote the existing post instead.
bryanrasmussen21 hours ago
it depends on how much interest was shown, I've definitely posted things and then they get posted again less than 24 hours later and it is that second post that takes off.
gjvca day ago
it's a shit website with awful fonts, certainly
jamietannaa day ago
Which fonts are you seeing not looking good? It seems perfectly readable sans-serif and monospace wise, but could be system preferences on what fonts to use?
pierrebarre21 hours ago
Or just use https://github.com/Barre/ZeroFS
Works pretty awesomely with git workloads, even Linux sized trees.
jeremyjh17 hours ago
Do you have any benchmark data you can share?
What you are saying sounds like an assertion that the problem described here[1] - by Vicent Marti - that packfiles aren't contiguous blocks of data and so every fetch fans out to more fetches from the client - is not actually a problem? Or is there an innovation in zerofs that somehow solves this for git? From what I can see it offers NFS and NBD interfaces and GitHub tried and rejected both of those very early on.
The problem he described seems consistent with known patterns from datalake storage architectures, its a big part of why columnar storage is the only game in town for most use cases.
This is why TFA has a lot of interest here - he has changed the storage layout of git packfiles to a columnar model to address this challenge.
[1] https://cursor.com/blog/git-at-any-scale#git-without-packfil...
pierrebarre17 hours ago
I’m not saying the access pattern isn’t real. I’m saying it largely doesn’t matter in practice.
If Git repos were routinely terabytes in size, this would be a much harder problem. But the vast majority of repos are <1GB, and at that scale caching dominates. Even with imperfect locality, you can cache enough of the working set that those reads don’t turn into s3 round trips.
In a low-latency environment, I haven’t found filesystem round trips themselves to be an issue for Git workloads either.
alizainfa day ago
You can also run git on postgres - https://github.com/usecontextlayer/pggit
NetOpWibbya day ago
Oh this is exactly what I need, fantastic! Thanks for sharing.
mgrandla day ago
Sweet. It’s kinda wild to me that this hasn’t been done. Would be so much nicer if gitlab/forgejo/gitea/… supported object storage for everything. Currently you always still need a filesystem for git repos.
baalimagoa day ago
> It’s kinda wild to me that this hasn’t been done
https://github.com/awslabs/git-remote-s3
This works seamlessly so you can run `git remote add origin s3://my-git-bucket/my-repo`
everforward19 hours ago
Doesn’t Git store data in sparse files? My impression is that git’s on-disk layout is exactly the kind of thing you’d avoid on object storage. Interactions involve a ton of small reads, resulting in poor performance and enormous bills.
It only really makes sense to tarball repos into cold storage on S3 or Glacier, but short of GitLab cloud I suspect there aren’t enough repos cold enough to be worth the dev costs.
S3 that doesn’t have wild costs for git objects sounds like it’s just NFS
masklinn17 hours ago
Git does not use sparse files no, however in packs objects are delta-ified: any object can be either literal or a combination of literal segments and range copies from a base object, and that base object can be the same, recursively. So to resolve any object you need to jump around a fair bit in the pack file. The normal GC creates delta chain of length 10, aggressive defaults to 50, the maximum is 4095.
shados12 hours ago
There's a bunch. I got pissed during one of the last GitHub outages and had an AI agent one shot a clone with PR, stacks, actions, and full compatibility with the git client running on Cloudflare workers and R2. Only limitations is it was https only because CF workers don't have tcp to implement and without an enterprise account.
Works great to this day. And I was far from the first.
throwaway7356a day ago
It has been done. It is no longer done because it is not efficient.
Yes, it was not "object storage", but Git can be served from a dumb http server as static files. Now someone figured out that object storage can also serve static files via http. Wow!
erua day ago
On Linux, Fuse is your friend. See eg https://github.com/matthiasgoergens/git-snap-fs
jauntywundrkinda day ago
After Git At Any Scale there's been a lot of these! (https://cursor.com/blog/git-at-any-scale https://news.ycombinator.com/item?id=49348141)
https://github.com/Nickforall/walgit-elixir https://github.com/tobi/walgit (https://news.ycombinator.com/item?id=49420598) https://github.com/tuist/micelio/
jiggawattsa day ago
Next: replace whole-file hashes with a Merkle Patricia tree hash and enable BitTorrent-like distribution protocols on top, not to mention the deduplication advantages!
notpushkina day ago
History repeats itself: https://github.com/cjb/GitTorrent
JoshTriplett21 hours ago
> replace whole-file hashes
BLAKE3 has a whole mechanism for this, and as an added bonus it'd be substantially faster.
mmastraca day ago
Nice. I saw some git-on-durable-objects projects but I'd so much prefer a straight object storage option.
LoganDark11 hours ago
> (I’ll call this "dotgit" so I don’t have to write as many backticks)
And then "dotgit" was never seen again :)
colechristensen18 hours ago
I reimplemented git in elixir with additional backends, it's working in production for my own git code forge but definitely has some rough edges.
sisuo3039020 hours ago
[flagged]
uptownhra day ago
[flagged]
scoopertroopera day ago
That Claude written page is impenetrable. You really need to write yourself or use a better model.
hanwenna day ago
"Finally delta objects should be stored as their own object in the packfile instead of slapped onto the end of the object it’s a delta of so that you don’t have to read the object and its deltas to read the object in the first place."
Author thinks that delta encoding is there for no reason. Good luck, kid.