GitHub vs GitLab vs BitBucket Server (Formerly Stash)

This article will try to compare GitHub, GitLab and BitBucket Server (previously called Stash) installed on your own servers. Similar comparison of cloud offerings is outside the scope of this article. I won’t try to go feature by feature in some kind of a table so that you can count who has more features. I find that approach often misleading even though it’s very commonly used among companies (especially where there is a software architect around). Instead, I’ll give my opinionated view.

GitHub

githubGitHub has a great, intuitive, informative and, to many, familiar UI. Its big advantage is that most of us already used GitHub.com (if not as a repository than at least to clone someone some code or to look at snippets). If installed on our own servers, most developers will feel at home. It features LDAP integration, integration with JIRA and many other features important to today’s companies. You’ll hardly be in need of something that GitHub doesn’t have. On top of “enterprise features”, it has Gists (a way to share code snippets), ability to edit files directly from the browser (comes in handy when taking notes during a meeting), works with almost any cloud provider, has powerful search, and so on. It comes with its own Wiki and issue tracking. In many cases it is enough for many needs. If it isn’t, it can easily be connected with Jenkins, JIRA, Confluence, BugZilla, Trello and many other products. It can be used as a full package or in conjunction with others. Simply put, GitHub is the gold standard for code repositories. Since everything is so peachy, we could just finish now so that you can go to their site and pay a huge amount of money for licences and install it. However, that’s where problems start accumulating, especially if you haven’t evaluated the alternatives.

First surprise comes when you discover that prices are nowhere to be found. You need to request a quote. In most cases, that’s a sign that prices are high (or at least higher than those of similar products). I won’t provide here the exact pricing since it depends on different variables but suffices to say that it costs more than other solutions. Is it worth it? Wait until we get to GitLab.

Another problem is installation. GitHub provides installation to various cloud providers or a VM that you can run on your own servers. I was truly surprised when I discovered this since it didn’t fit my guess of the reasons people have when considering GitHub Enterprise Edition. If I’d want it to run in one of the cloud providers, I’d simply purchase private accounts on GitHub.com. On the other hand, if I’d want to install it on my own servers, having a pre-made VM is not an option I’m comfortable with. Installation on my servers means that I (or someone from the organization) needs to be in control. Maybe I use VMWare or maybe I’d like to run it directly on the server. Maybe I’d like to know the installation steps. Maybe I would even want it to be deployed as a Docker container. No matter the choice, I need to be in control and having a pre-made VM image does not fit this need. That does not mean that the pre-made VM would not come in handy. In some cases it would and in some others it wouldn’t.

Finally, it’s not open source. I’m fully aware that most companies are never going to look at the code and even those who do will never contribute. However, this is similar to the problem I have with the installation. I like to know that I can be in control even if I will probably never have to modify anything. That would not be such a problem if closed-source provides things that open source doesn’t. However, that is not the case.

GitLab

GitLab-logoLet’s start with the simple statement. GitLab has (almost) everything that GitHub does. Features are more or less the same (with very few exceptions) and UI is as great as the one from GitHub. If you go to GitLab’s site you’ll have a hard time not thinking that you are in GitHub. One would need to look very hard to find something meaningful that GitHub has and GitLab doesn’t so let’s skip at what distinguishes GitLab from GitHub.

GitLab Community Edition is free and open sourced. That in itself gives it a huge boost when compared to GitHub Enterprise Edition (the only version that can be installed on premises). While there are some features available only in the enterprise edition, you might not need them and even if you do, it makes the decision easier knowing that you can start with the free version and upgrade to the paid one later on. That does not mean that GitHub doesn’t have a trial. It does. But, as trials go, it is for a limited period of time that might or might not be enough. With GitLab community edition you might be fine until the end of time or you might start with the enterprise edition right away. The good thing is that you have a choice that does not expire.

Pricing for the enterprise edition is reasonable (several times lower than with GitHub). Unlike GitHub, GitLab can be installed on virtually any hardware/OS/CM combination. Cloud providers, virtual machines, directly on the server, Linux, Windows, Puppet, Chef, and so on. I dare you to find a combination you’d like to use that is not supported by GitLab. They are even maintaining Docker images. More over, installation is dead simple. It shows the power of open source with infinite combinations community came up with and wrote about.

Let’s move on and take a look at the third contestant.

BitBucket Server (Formerly Stash)

downloadShort story is that I do not recommend it. It has no advantage over the other two (except maybe integration with other Atlassian products), its UI is horrible (for the lack of better words) and it is a huge and slow application that will eat your resources in no time. However, it has a great marketing power through the rest of Atlassian products. JIRA, Confluence, Bamboo and other Atlassian offerings are very popular and present in many companies. That makes BitBucket Server a very tempting choice. However, not all products Atlassian makes are truly good with BitBucket Server and Bamboo being in the group of those that made my life harder than it should be. UI lacks information I expected to find (actually information is there but not where it should be) and is as un-intuitive as it can get. There is no option to commit code snippets (called Gists in GitHub) and no editing in-line. That leaves us with the integration with other products as the reason to purchase it. Right? Wrong! I haven’t seen anything in Stash (I’ll use the older and shorter name from now on) that was easier to set up than in GitHub or GitLab. Integration with Jira is easy in all of them (haven’t tried the integration with the rest of Atlassian products so that’s the part I might be wrong). Of course, if you are the company doing everything Atlassian, then Stash is no brainer. Where there’s room for JIRA, Confluence, Bamboo, HipChat and what not, there is room for Stash as well. But then again, the fact you’re reading this article probably means that you are not in that group.

Good thing about Stash is the pricing. It’s a one time fee that is not much higher than the yearly subscription to GitLab (we already established that GitHub is over the top). Moreover, if you’ll have only few users (up to ten) the price is so low that it’s practically free. Then again, you’re probably not thinking to set up your own repository for only a few people. However, the price is low only if you already have a Wiki and an issue tracking system. If you don’t that will cost you extra with Stash while the other two have it incorporated.

Besides the (questionable) price advantage and the desire to have everything Atlassian, there is no real reason to choose Stash.

Final Verdict

If price is not an issue, you don’t mind closed-source, you’re OK with its installation options and you want to put your trust into the biggest and the greatest, choose GitHub Enterprise Edition.

If you must have everything Atlassian, choose BitBucket Server.

Everyone else should go with GitLab. It’s a great product, it’s open source with the enterprise offering, its pricing is reasonable and there’s nothing it lacks when compared to GitHub.

The pricing of the products we discussed can be found through the following links (thanks to duckieho):

GitHub

GitLabs

BitBucket

*Hosted private repos: https://bitbucket.org/product/pricing
* On-site: https://bitbucket.org/product/pricing?tab=server-pricing

Finally, if you’d like to try it out and have Docker installed, just run the following command and you’ll see it in action in no time.

docker run -d --name gitlab-ce \
    -p 8443:443 \
    -p 8080:80 \
    -p 2222:22 \
    --volume $PWD/gitlab/config:/etc/gitlab \
    --volume $PWD/gitlab/logs:/var/log/gitlab \
    --volume $PWD/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce
Advertisements

18 thoughts on “GitHub vs GitLab vs BitBucket Server (Formerly Stash)

  1. jaxzin

    Something I see missing in most comparisons like these is that Gitlab’s API is missing a lot of functionality. It doesn’t contain hyperlinks and is missing basic actions like listing the commits of a merge request. If you have any need to build tooling around your source control, and what shop with a mature CI pipeline won’t, GitHub is a much stronger product and worth the cost.

    Reply
    1. Viktor Farcic Post author

      You are right about the API. It truly depends on what you want to do with a repository and how big is your budget.

      As for the example you mentioned, I never had that problem since I don’t tend to use repository API from the CI pipeline. In my case, repository sends a signal to CI, CI clones the code and the rest doesn’t have much to do with Git. Either all the tests were successful or something failed. CI pipeline is supposed to be automated process. When something does fail, both UI and Git client are decent in showing all the commits. On the other hand, maybe I misunderstood what you’re trying to say.

      Reply
    2. Sytse Sijbrandij

      Hi Jaxzin,

      Thanks for the feedback, We want to ensure the GitLab API has all the features people need. I don’t understand what you mean with the API not containing hyperlinks, can you elaborate? Listing commits on MR’s makes sense, I’ve made a feature request on https://gitlab.com/gitlab-org/gitlab-ce/issues/3748

      By the way, if you need CI pipeline functionality consider using GitLab CI. All the CI functionality is available by default on every GitLab instance. And it can do many things, from multiple stages to parallel jobs, all specified in a .gitlab-ci.yml file. See https://about.gitlab.com/gitlab-ci/ for more information.

      Reply
      1. jaxzin

        Thanks for turning my random comment into a feature request (shame on me for not doing that myself).

        What I mean by hyperlinks is I want links to all related resources so I can explore the API programmatically and without the need to construct URLs via concatenating strings together. In academic terms I want the Gitlab API to meet Level 3 of the Richardson Maturity Model (http://martinfowler.com/articles/richardsonMaturityModel.html). In more concrete terms, I mean include URLs in the JSON payload to other parts of the API.

        For example, the Gitlab Users API (https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/users.md) has the hyperlink to the “avatar_url” and that’s it. It doesn’t link to sub resources like the keys, and emails. Contrast that with the Github API for Users (https://developer.github.com/v3/users/) and see that it contains hyperlinks to all related resources including the resource itself (aka the field “url”).

        And not to be a wet blanket about Gitlab CI, but its just not the right choice for everyone. Or sometimes we’re at the mercy of a corporate team that’s made a different choice. Maybe they picked Gitlab simply because its cheaper than Github. Or maybe its not the complete choice, so sacrificing development resources on an API because folks can “just use Gitlab CI” is a narrow vision of how mature teams using APIs to integrate source control, CI, CD, deployment pipelines, issue tracking, chat rooms, etc.

        The message is clear though that Gitlab wants users to adopt Gitlab CI too in a cohesive “Atlassian-like” model and I can see that working for a majority of your userbase.

        Reply
  2. Ben

    Viktor Farcic said: “I dare you to find a combination you’d like to use that is not supported by GitLab.” -> from GitLab Documentation: “GitLab does not run on Windows and we have no plans of supporting it in the near future.”. see this funny link, too: https://forum.gitlab.com/t/how-to-install-gitlab-on-windows/32. Oracle DBs are only supported through third party software. MySQL only available on EE.

    Concerning Stash: Can be installed on Linux and Windows (up to 500 users on Windows only). Oracle support. I partly agree with you that the UI isn’t great. But I didn’t have any problems finding what I was looking for. Snippets and inline editing are available through commercial plugins for about 6$/user/year in the first year and 3$/user/y afterwards.
    I agree with you that to use Stash to its full functionality one should use Jira as well.

    I won’t say that Stash is better than GitHub or GitLab. For example: having the ability to commit what you need to an open source tool can be a huge advantage compared to opening just another ignored feature request on the Atlassian bugtracker. But I think that every product has its advantages and disadvantages. And your article looks a bit biased and not thoroughly researched. No offense meant, but to me it sounds like you only looked for a few parameters specific to your own way of working with Git when comparing these tools.

    Reply
  3. Mark Warren (@mark_warren)

    Interesting summary and I think I’d agree with pretty much all the key points.

    Fair disclosure for this next comment – I work for Perforce. You might want to take a look at Helix GitSwarm (www.perforce.com/gitswarm). We’ve worked with the good folks at GitLab to extend it to use the Perforce Helix versioning engine as a mirrored master repo. That allows all file types/sizes to be in the repository regardless of Git’s usual limitations (so you can have the highly desirable “mono-repo”) via the magic of “narrow cloning” and provides proven enterprise grade security, availability etc. It’s also available for free (for small teams/projects) and has various flexible on-premise and hosted deployment options. (BTW Helix has a great Jenkins integration you might be interested in.)

    Reply
  4. Pingback: Revision control systems | Quality notes

  5. Andreas

    This is just advertisement for Gitlab. In my experience Atlassian Bitbucket Server (formerly Stash) has better GUI, much higher performance and fewer bugs than Gitlab. Gitlab is a Ruby on Rails App and that brings problems with scalability, performance and security which you can even notice on their own installation of gitlab (https://gitlab.com/gitlab-org/gitlab-ce). If you don’t want to spend money, take gitlab. But for professional software development there are better solution on the market.

    Reply
    1. Viktor Farcic Post author

      This is, by no means, an advertisement for GitLab. I am not affiliated with any of those companies.

      I respect your opinion and it is inevitable that different people have different experiences and different arguments for one tool over the other.

      Reply
  6. Dmitry

    Hi Victor,

    Try RhodeCode (https://rhodecode.com), it’s worth including in the list. It is an open source platform for secure, behind-the-firewall source code management. It works with Git, Mercurial, and Subversion and integrates with most of the industry-standard tools (Jira, Jenkins, Slack, etc.) With LDAP, Active Directory, code reviews and a one-click installer, RhodeCode is at least as capable as other offerings out there.

    RhodeCode
    * Hosted private repos: on-site only
    * On-site: https://rhodecode.com/pricing

    Reply
  7. Mark Gillespie

    Evaluated the latest versions of all 3, and we came to the universal conclusion that BitBucket Server was by far and away the best product. It won on UI, on features, on stability and scalability, but above all, when used with the integrations with JIRA, it was unmatched.

    Reply
  8. vievk

    Hello GIT experts,

    I am new to GIT world.I would like to know which third party provider (e.g Bitbucket,Gitlab,Github) provides more API resources?

    thank you in advance.

    regards
    vivk

    Reply
  9. Ilmari Kontulainen

    Hi,

    Thank you for a great comparison. It would be nice if you could add Deveo (https://deveo.com) to the list. It offers a good alternative to the software listed above. You can use Deveo for free from the cloud with no user, project or repository limits. There’s a storage limit of 1GB for free usage, after which the exceeding storage is priced 1€/GB/month. Deveo also supports Mercurial (HG) and Subversion (SVN).

    If you wish to host a tool in your local environment, behind your firewall, we (Deveo) will open a free tier for 5 users, after which the pricing is 36€/user/year.

    (I’m affiliated with Deveo)

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s