mht.wtf

Computer science, programming, and whatnot.

Git out

May 06, 2026 back to posts

On May 23, 2011, I bought Building Java Programs 2nd edition from bokkilden.no to learn how to program. A week later, product.support@pearsoned.com emailed me a password I had registered an account with in plain text. The world was different.

A little later, on September 25th 2011 at 22:21:55 UTC, I created my GitHub account1. I've been on GitHub for basically my entire life as a programmer, and I've used it for course work, personal projects, and professional work. To me, GitHub has always felt a little too big, with too much stuff and too much clicking around in a web interface, so on November 15th 2018 at 13:35 UTC I created my Sourcehut account2. Since then, I've used a weird mix of the two, mostly sr.ht for personal things, and exclusively GitHub for professional things.

The thing is, though, for personal projects I don't really use

I sat down to really think through what I use git remoted for, and found that it's really only two things:

  1. backup
  2. synchronization between computers

So really, for my own stuff, neither GitHub nor Sourcehut, nor probably any other forge, gives me much value for their weight. And surely, things in your life needs justification to stay in your life, not to be removed. So I decided to move off of git forges.

Self Hosting

The first part is really "self hosting". git doesn't require anything to be "self hosted", so even using that term to describe what's going on is kind of silly. I created a git user on my Hetzner VPN that also hosts the site you're currently reading, set it's login shell to git-shell, and created some --bare repos in its home directory. Now I push/pull to/from git@mht.wtf:foobar and go on with my day.

The second part is hosting something. I want to have some of the things I've made visible to the world. My solution is git.mht.wtf which points to cgit in a Docker container in the same docker-compose file as all of my other services in my garden. The service has all public repos mounted as ro directories, so making a private repo into a public repo means adding another mounted path to a list in docker-compose.yaml.

Backup was already enabled for the VPC, so that's handled. I might set up another backup not connected to Hetnzer at all, as that's a current single point of failure: if Hetzner permanently locks me out, I only have the things I have on other machines.

I didn't advertise this to anyone or anything, but ClaudeBot showed up immediately:

172.18.0.5 - - [06/May/2026:18:31:05 +0000] "GET /robots.txt HTTP/1.1" 200 24
"http://git.mht.wtf/robots.txt" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like
Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"

I set up anubis, but that didn't seem to do much against the machine. It's currently sending around 6 requests an hour, so maybe it's okay. My git.mht.wtf/robots.txt does allow bots to roam around, but I got confused at first and thought it was the other way around, so I made this meme:

ClaudeBot looking at my robots.txt

Oh well, I choose to believe that ClaudeBot blindly ignores robots.txt no matter what you try to put in there, so that my meme is funny.

The Future

Moving my stuff off of public forges does mean that I've reduced the chance of interacting with other programmers in that context from a very low number to zero. I guess it's the equivalent of choosing to hang out in my own backyard instead of going to the park. The internet is a busy place, people have stuff to do, and to be fair, most of my personal things are junk projects that are abandoned after a week. Nevertheless, zero is a low number, and it makes me wonder.

Thanks for reading.

Footnotes

  1. Use the API to get this with curl -L api.github.com/users/<username>

  2. I still have the signup email for this one; no need for an API.

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License