GitHub or GitLab in 2020

Rob Muhlestein
5 min readDec 27, 2019

--

Update: What the fuck was I thinking! I’m dropping GitHub and all content on it (while keeping an account there). The only thing GitHub has is discoverability and if you need GitHub for that you have bigger problems. When I found out the supremely talented cview team decided to keep GitLab is woke me up to my insanity from January. Not only is LiberaPay better than anything GitHub has, but GitHub has decided to purchase the worst packaging system and company in all of technology in the last 20 years. That’s right, GitHub purchased the disastrous fail of an organization — responsible for the biggest worm attack in history — NPM, Inc. Good fucking riddens Github! I — and so many others including ESR and the entire Gnome team — will enjoy a singularly superior opensource service while you flounder and continue to fail.

I’m having a serious battle with myself in my mind about GitHub and GitLab. I swear I revisit this question ever year around this time when doing year-end cleaning. God knows I need to cleanup all the piles of dead code out there and focus on the good stuff that remains. SkilStak has 144 GitHub repos. I have 39. I don’t even want to look at the skilstak-cornelius account (oh wait, I can’t, must have deleted it already).

Here’s the thing: a lot has changed over the last year. Here are some things to note broken down by each:

GitHub

  • Caught up with GitLab on continuous integration.
  • Added sponsorships which are very popular.
  • Made its pricing model better.
  • Added actions.
  • Added statuses.
  • Added package support.
  • Continues to enjoy the best VSCode integration.
  • Enjoys massive user base and growing.
  • Potential project contributors more likely to have.
  • Added automated security vetting, reporting.
  • Added social media cards (Twitter, etc.)
  • Superior user activity tracking and analytics.
  • Still charges for private repos for organizations.
  • Flat organizations with no subs.
  • Checkered past with scandals and cover-ups.
  • More likely for Microsoft to do something shitty.
  • More social.

GitLab

  • Many developers still don’t even know exists.
  • Has private repo creation from the command line.
  • Has better security by providing a container.
  • Still just so fucking beautiful.
  • Has sub grouping for superior organization.
  • Everything is free and open source.
  • Much better company, leadership, business model.
  • More likely to unexpectedly fade away.
  • More serious.

Since so much of code I develop falls in the package, library, module space — mostly because I think everyone should consider what they are making as a composition of reusable packages and modules — I’m inclined to keep all such things on GitHub where people are more likely to discover and adopt them due to the global dependency on GitHub. This goes for issue submissions as well. Everyone has a GitHub. Some of them have GitLab as well.

One specific example of this is a Vim plugin for PEG I want to create. The Plug plugin manager automatically assumes GitHub. It’s easy to get around, but annoying.

Which leads to the next question.

Org or No Org?

You still have to pay for private repos for GitHub organizations, which makes GitLab a clear winner for such things. This has lead to a rather annoying side-effect: most significant libraries, packages, modules — even entire frameworks — are permanently associated with individual accounts on GitHub, even if the person has nothing to do with maintaining the project any more.

The opposite is true on GitLab where subgroups are only available to groups (and not personal accounts). This has created a very strong influence to make a group your main thing instead of your personal account. Since every single group is under a personal account and groups are unlimited this makes the most sense. In fact, some people will even name their personal account with an underscore (_robmuh) and use their name as their org (robmuh). In my case I already had org names so kept my private name robmuh.

I’m also not too worried about my personal account on GitLab not demonstrating the full extent of my coding prowess because, frankly, very few people will just find it directly on GitLab. That is where GitHub really blows GitLab away. It also supports the idea that one’s best coding work should be under one’s personal account on GitHub where it is likely to be forked and receive stars and such, which (unfortunately) are considered valuable when job hunting, pitching for conferences, etc.

I suppose that is part of the promoting-the-individual appeal of GitHub as “Facebook for developers” and is consistent with Microsoft’s “developers, developers, developers” mantra. To be fair, GitLab is more about “enterprise, enterprise, enterprise” when it comes down to it. Perhaps it is this distinction that should drive all of my decisions about where something should live.

And here are a few other things:

  • What about when I die? What is mostly likely to live on? This applies to domain names as well.
  • How important is “brand management”? I show no activity on GitHub lately and my personal repos are unimpressive because all the good stuff is under organizations.
  • People tend to steal from my config, not use it directly. Which means re-integrating my custom configurations back into a personal dotfiles might be the best thing to do.

Arg. I definitely overthink things. But in a very real way people have been paying me my whole life to overthink things. So here’s my conclusion:

Imma keep all the following stuff on GitLab:

  • All web development, just so much easier
  • All project repos likely to be referred to from learning content
  • All casual private working repos (cuz save)
  • All organization content (S²OIL, SkilStak, etc.)
  • All highly personalized and private data

Everything else on GitHub:

  • Go packages and apps
  • Node modules and commands
  • C libs and commands
  • Vim plugins
  • Configurations (including dotfiles)

Perhaps the hardest decision is about the repos related to learning content. On the one hand GitHub has great social media card support, but on the other I would likely be posting a link to an actual web site (with better social media card support) that links to the source repo. That way the learning content is discovered through web searches and the project repo is just a resource of it. Often there won’t be a repo at all because all the code will be included in the learning content itself (removing the dependency on any repo and the Internet itself as a PWA).

I think I’ve arrived at a basic rule to follow:

The more likely you are to post, link, or otherwise depend on a project repo directly the more you should consider GitHub.

The more you need convenience and efficiency and don’t care about posting a repo the more you should consider GitLab.

Which, I realize now, can be further boiled down to:

The more public your code, the more you should consider GitHub. Otherwise, use GitLab.

Originally posted on skilstak.io.

--

--