Peter Wayner
Contributing writer

GitHub vs. Bitbucket vs. GitLab: An epic battle for developer mindshare

feature
Jul 09, 20189 mins
Cloud ComputingDevelopment ToolsSaaS

GitHub, Bitbucket, and GitLab pile lots of poshy extras on top of Git. Which should you choose?

It’s the kind of meta notion that makes undergraduate philosophers say, “Whoa!” Software today is so complicated that we need to write software to help us understand and construct the software we need to write. Code begets code begets more code…

The code repository named Git is everyone’s favorite tool for curating software, but even this neat open source software isn’t enough. Most programmers and the teams to which they belong are now wedded to online versions of Git that add many extra layers of analysis and presentation to make it possible to wade through the vast swamp that is our code. 

There are three big contenders now for the best place to stash your regular expressions, anonymous functions, and intense recursive tree-walking flashes of genius: GitHub, Bitbucket, and GitLab. All of them are competing to be the best place for you to store your source.

Is one better than the other? Is one the best place for your team to mint awesome-nocity? Let’s pit them against each other and see which one rules.

GitHub is biggest

Perhaps it is because it was the first big website to specialize in hosting Git repositories. Perhaps it is because of its good works in the open source community. In any case, GitHub is leading if you use the metric of sheer reported volume of code. GitHub claims 28 million users and 85 million repositories. Bitbucket reports six million users and GitLab is a mystery that didn’t respond to the question.

Some think this matters. Open source developers who like to jump between projects can use one login and link all of their work. Everyone can follow hot developers on GitHub like cat lovers follow the creators of the best cat videos on YouTube. The network effects that seem to dominate the Internet push GitHub far into the lead.

Others aren’t so sure. Yes, they like linking their public code but many people don’t want to link the work they do for clients. That should be separate and non-public. In that context, the network effects aren’t worth much of anything.

Bitbucket and GitLab are cheaper

All three of the services offer many free options, but all make their money by charging developers, usually professionals, to host private projects. GitHub starts at $7 per month per developer. Bitbucket starts at $2 per month and GitLab starts at $4 per month.

But these numbers are just rough guides because there’s a good chance you’ll want to upgrade. A better tier at Bitbucket costs $5 per month. GitLab has a premium version that costs $19 per month—and you’ve got to pay annually to get that price.

There are almost certainly hidden discounts for companies with larger teams and these make it hard to compare. You might think that Git hosting is a commodity but these companies have found ways to add so many extra features that your head starts to spin as you start to compare what you get for your money.

Bitbucket and GitLab allow unlimited private repositories

What you get for free is wildly different. Both Bitbucket and GitLab let you store your own private repositories for free. You only start paying when your team grows and becomes more professional. GitHub will store your projects for free only if you’re a student or you make the projects public. That’s great for open source but not for all of your private side projects.

These free tiers can be fairly generous. Bitbucket allows small teams of up to five collaborators. GitLab allows unlimited collaborators.

It’s worth noting that these prices and tiers are for the cloud-hosted version. If you want to self-host, it can be cheaper. There are also academic plans and open source community versions that are very generous.

Bitbucket and GitLab have continuous integration

These companies are expanding by not only storing the code but building and deploying it too. GitLab has rolled in Jenkins-based continuous integration and then added in deployment support and monitoring in a virtuous loop. You can commit your code, deploy it, monitor it, and then start planning the next set of modifications without leaving GitLab.

Similarly, Bitbucket offers Pipelines, a similar build and deploy tool that does much the same thing with a few clicks. Perhaps it doesn’t offer as much monitoring, but it is tightly integrated with Amazon’s cloud.

GitHub lets you use your own continuous integration server

Do GitHub users ever build their code? Of course. Many use third-party tools like CircleCI or Travis CI that are triggered by commits to GitHub. Some even host their own version of Jenkins, which is available from an open source repository hosted at GitHub.

The third-party tools may not be under the same corporate umbrella, of course, but they accomplish much the same thing. And then sometimes the separation can be an advantage if you want to do things slightly differently.

It’s worth noting that there’s nothing stopping you from rolling your own continuous integration solution with Bitbucket or GitLab either. They just check out the code like any other Git client.

GitLab lets you develop online

What began as a tool for letting you browse static code is slowly morphing into a full-fledged platform for development. GitLab’s interface is growing more and more complex and starting to approach what the company is calling an integrated development environment or IDE. It’s not as sophisticated as some of the desktop-centered monoliths like Eclipse or Xcode that offer integrated debugging, but that doesn’t mean you can’t use it to do more and more sophisticated development with clean, multi-file commits.

Both GitHub and Bitbucket have  simpler versions that let you edit your files online and then commit the result. They’re better for quick touch-ups and fixes.

It may seem like a little thing, but Bitbucket’s search algorithm understands many of the major languages, making it possible to rank the results. The definition of a function or a variable pops up on top and the uses follow. If you’re trying to figure out what some keyword does, you don’t have to scroll through pages of results to find the answer.

Bitbucket comes from the same company that makes Jira

Jira is one of the leading tools for organizing the development process by tracking tickets and keeping teams aware of who does what to which repository and when they finish it. Jira can be integrated with all, but is owned by Atlassian, which makes sure Jira works well with Bitbucket.

Both GitHub and GitLab have their own issue tracking tools built into the workflow that do pretty much the same thing. For more bells and whistles, GitHub and GitLab users can turn to Jira or any of a number of similar tools.

GitLab is open source

If you don’t like any particular part of GitLab, you can just download the Ruby source code, modify it, and host it yourself. It’s open source and just waiting for you to fork it. GitHub offers some useful pieces of its puzzle in its repositories, and Atlassian offers generous support to all open source projects using approved licenses. But GitLab gives you the raw code for the entire platform in a community edition.

There are several other open source Git server projects as well, like Gitblit, written in Java, Allura, written in Python, and Gogs, written in Go. But you’ll have to host them all.

GitLab is tightly integrated with Google Cloud

You don’t need to use Google Cloud with GitLab. GitLab just makes it a bit easier by integrating with the Google Kubernetes Engine. Just a few clicks moves your code into a running container cluster. Even if you don’t use Google Kubernetes Engine, GitHub still likes to work with Kubernetes. If you deploy to a Kubernetes cluster, you can monitor everything – CI environments, deployments, pods, and Kubernetes metrics – right from GitLab.

Bitbucket integrates with AWS

Again, you can always deploy your code wherever you want, but a Bitbucket add-on in the Atlassian Marketplace will push your code into an Amazon S3 bucket and use AWS CodeDeploy to run it on EC2. All you need to do is configure it once and it’s ready to go.

Bitbucket has lots of extensions

The AWS CodeDeploy app isn’t the only option in the Atlassian marketplace. As of this writing, there are 304 apps written by third parties to extend Bitbucket. Some add features like notifications or graphs of commits and others help with project housekeeping by tracking the workflow. If you’re feeling bossy, you might install the Commit Policy plug-in that scrutinizes the commit messages to make sure they mention issue numbers and other details. If you don’t see what you want in the Marketplace, you can write your own.

Git (plain) is free and private

There will be some who don’t want to use any of these luxurious options. Git is a pretty simple command line tool with plenty of commands for digging into the repositories themselves. You can push, pull, and track the code on your own using the command line. If you’re good at memorizing command line instructions and you don’t want any of the nice, web-based displays of code, diffs, and more, then plain old Git will serve you well.

Use two or all three!

It may seem like overkill, but there’s no reason why you need to choose just one. Git makes it simple to push commits upstream, and there’s no reason why you can’t add multiple upstreams. If you need features from two or all three of these platforms, you can just configure your repositories to push to all of them. If you’re lucky, you can stay inside the free tiers. And if you’re not, they’re not too expensive.