Coming Back to GitHub
March 26, 2026 · 566 words · 3 min read
Six years on GitLab, a lot of principle, and a migration that was messier than I expected.
Back in 2019 I deleted my GitHub account. Microsoft had just acquired the platform, controversy after controversy started hitting, and the mood in certain corners of the internet (HN) was one of principled exodus. I joined in, migrated everything to GitLab, and felt briefly righteous before getting back to whatever I was supposed to be doing.
I used GitLab for six years. It's fine. The CI/CD is genuinely powerful, the self-hosting was nice even on a cheap DigitalOcean droplet, and for a while it felt like it had more going on philosophically. But the UI is a maze, new features sit in menus you'd never navigate to by instinct, and it's software built by people who seem to have stopped asking whether anyone would enjoy using it. Meh, it gets the job done. It never felt good to use, though.
So I came back. The principled stance aged the way principled stances tend to, which is quietly and without fanfare. The ICE contract ended. I only have so many evenings.
The thing that actually won me over is the CLI. gh is one of those tools that earns its place immediately. Creating a repo, opening a pull request, checking run status without leaving the terminal. It sounds like a small thing but it collapses a surprising amount of friction. I've started reaching for it instinctively in a way I never did with GitLab's equivalent.
The rest of it is more complicated. GitHub Actions is fine but I find myself fighting the YAML in a way that makes me miss how GitLab handles pipelines. The concepts mostly map, but there's a lot of ceremony for simple things, and the marketplace is a graveyard of actions last updated in 2021 that you use anyway because they're the top result. The runner speeds are also just slow, which I've fixed by routing jobs through Blacksmith. The whole integration is a single line change per job, which is the kind of thing I genuinely appreciate.
jobs:
build:
runs-on: blacksmith-2vcpu-ubuntu-2404 # was: ubuntu-latestThat's it. Things run noticeably faster. Copilot is everywhere, shoehorned into every surface whether it belongs there or not. The little ghost icon hovering at the edge of text inputs, suggesting things I didn't ask for. I get that it's the product now, and I understand why, but it gives the whole platform a slightly pushy feeling. Like a shop assistant who follows you around just in case.
The code review experience I've been supplementing with Graphite, which handles stacked PRs properly and has a PR inbox that actually makes sense. The gt CLI is the interesting part. You create branches, commit, and submit PRs without touching the GitHub UI at all.
gt create --all --message "feat: add thing"
gt submitStack a second PR on top while the first is in review, push both at once with gt submit --stack, address feedback anywhere in the stack with gt modify, and sync everything back up with gt sync. For personal projects it's overkill, honestly. But I use it at work and having the same tool everywhere removes a context switch I didn't realise was bothering me.
The migration itself was the --mirror flag and an evening. Clone from GitLab, push to GitHub, done.
git clone --mirror git@gitlab.com:username/repo.git
cd repo.git
git remote add github git@github.com:username/repo.git
git push github --mirrorNinety repos, all across. The GitLab account is still sitting there with forwarding READMEs, which is the digital equivalent of leaving a note on a flat you've already vacated. I'll delete it eventually. Probably.
GitHub is good and slightly annoying and I'm glad to be back. We'll see.