Gitlab hero border pattern left svg Gitlab hero border pattern right svg

Atlassian Bitbucket vs. GitLab

On this page


On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
Data Center
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap
On Roadmap


Atlassian Bitbucket gives teams Git code management, but also one place to plan projects, collaborate on code, test and deploy. It is marketed in the SaaS form (Bitbucket Cloud) and in a self-managed version (Bitbucket Server), however they are not the same product. Bitbucket Server is simply a re-branding of Stash. The two products are completely different code bases, written in two different languages (Cloud in Python, Server in Java) and do not maintain feature parity. Because of separate codebases they each have a completely different API, making it much harder to integrate.

Bitbucket supports Mercurial or Git, but not SVN. GitLab does not support Mercurial or SVN. GitLab is a complete DevOps platform, delivered as a single application, with built-in project management, source code management, CI/CD, monitoring and more. Bitbucket only does source code management. You would need to use Atlassian Jira to get project management, Bamboo for CI/CD and Atlassian does not provide a monitoring solution. Additionally, GitLab Ultimate comes with robust built-in security capabilities such as SAST, DAST, Container Scanning, Dependency Scanning, License Compliance, secret detection and more. Bitbucket does not support these capabilities and Atlassian does not have a product for them.

GitLab also offers an "on-prem" self-managed and "cloud" SaaS solution. GitLab runs the exact same code on its SaaS platform that it offers to its self-hosted customers. This means customers can migrate from self-hosted to SaaS and back relatively easily and each solution maintains feature parity.

GitLab has seen an increased interest from world-wide internet searches (a strong indicator for devops interest) over the past five years.

Between 2018 and 2019 Gitlab adoption as a Version Control System has increased by 21% whereas Atlassian Bitbucket's adoption has decreased by 11%. This is as per The Next Stack's analysis of Jetbrains Developer Ecosystem surveys.


  • Extending the native functionality of Bitbucket is done through plugins. Plugins are expensive to maintain, secure, and upgrade. In contrast, GitLab is open core and anyone can contribute changes directly to the codebase, which once merged would be automatically tested and maintained with every change.

Response to Atlassian's Bitbucket Comparison Page

Atlassian has a Bitbucket vs. GitLab comparison page. This update is to ensure that the correct product offerings are being compared (i.e.,, GitLab Self-hosted, Bitbucket Cloud, Bitbucket server, etc.)

  • Purpose built for the cloud - the site claims that GitLab is not purpose built for the cloud, which is somewhat misleading. GitLab is a single app that was built to run on many different environments including "the cloud" with Additionally, GitLab actually does zero downtime deployments. Also, Bitbucket Cloud and Bitbucket Server are different architectures (i.e., code bases) and diverging in functionality. See Bitbucket Rebrand FAQ (updated Jan 2018) for more information.
  • Best in class JIRA integration - It makes sense that Bitbucket should have great JIRA integration. GitLab is an integrated application from planning to monitoring with GitLab issues being a powerful tool for idea management, iteration planning, issue tracking and software development. However, we recognize that many organizations have been using JIRA for many years and have existing data and business processes built into it. Our goal is to make GitLab work seamlessly with JIRA, offer the best integration possible, better than the current Atlassian suite provides. Check out our JIRA integration page for more details.
  • Code Aware Search Beta - code aware search is a feature that ensures definitions matching your search term are prioritized over usages and variable names. Although GitLab does not currently have this feature, we've made code search even better with the GitLab 11.1 release. With enhancements to the advanced search syntax, you can now filter by filename, path, and extension, enabling you to find the right files quickly.
  • Mercurial Support - True. See the Summary section above.
  • Bitbucket UI add-on integrations - N/A


  • Evidence that Bitbucket Cloud and Bitbucket Server/Data Center are two different products and Atlassian is focused on the cloud one:
    • From Atlassian themselves, Bitbucket Cloud and Bitbucket Server are different architectures (ie. code bases) and diverging in functionality. This is more or less spelled out in their Bitbucket Rebrand FAQ (updated Jan 2018)
    • From a recent HackerNews article

      Atlassian wants you to move to their cloud product, it's that simple. Server is a thing that makes their life harder and stops them from extracting maximum revenues from you so you can expect a soft but persistent push to switch to cloud which will get harder over time.

    • Disparity between Bitbucket Server and Bitbucket Cloud for a top customer requested feature took Atlassian over 2 years to acknowledge. Customers found out the feature existed in Server but not Cloud once moving to Cloud. Still not resolved as of Q4 2018
    • An analysis of Bitbucket Server new features per release and feature-to-maintenance ratio, per release since it was changed from Stash Server, shows a downward trend in innovation (Data derived from Atlassian Bitbucket Server Release Notes)
      Bitbucket Server New Features Graph
  • Discussion from HackerNews article about Atlassian not allowing benchmarking

    Atlassian has always forbidden to talk about the performance of their products in their ToS and in their previous EULA. We all know why, but we don’t talk about it.



  • Bitbucket Cloud
    • Free tier - $0 - Unlimited private repos, Jira Software integration, Projects Pipelines (50 build mins/month), 1GB/month limit on file storage
    • Standard tier - $2/user/month (min $10/month) - Same as Free + 500 build mins/month + 5GB file storage/month
    • Premium tier - $5/usr/month (min $25/month) - Standard + some advanced features + 1000 build mins/month + 10GB file storage/month
  • Bitbucket Server / Data Center
    • Server - starting $2k perpetual (25 users, ppu drops roughly every 2x previous tier), includes year maintenance, single server, unlimited priv+pub repos
    • Data Center - $1800/yr (25 users , ppu drops roughly every 2x previous tier) includes annual maintenance, Server + HA, DR, mirroring, SAML 2.0
    • Must buy Data Center if over 2k users.



Free CI/CD with shared or personal Runners has shared Runners that allow you to use GitLab CI/CD completely free up to 2000 build minutes for private projects and unlimited for public projects. Alternatively, you can set up your own Runner for faster build processing, unlimited build minutes, or special requirements.

Explore offerings

Built-in CI/CD

GitLab has built-in Continuous Integration/Continuous Delivery, for free, no need to install it separately. Use it to build, test, and deploy your website (GitLab Pages) or webapp. The job results are displayed on merge requests for easy access.

Learn more about CI/CD


Internal projects in GitLab allow you to promote innersourcing of your internal repositories.

Find out more about innersourcing

Commit graph and reporting tools

GitLab provides commit graphs and reporting tools about collaborators’ work.

Learn more about commit graphs

Availability is at 99.5% availability while we want to be above 99.95%. We’re hiring to improve this in the last two months of 2017 and in 2018. status

The most comprehensive import feature set

GitLab can import projects and issues from more sources (GitHub, Bitbucket, Google Code, FogBugz, Gitea and from any git URL) than GitHub or any other VCS. We even have you covered for your move from SVN to Git with comprehensive guides and documentation.

Making it easier to get up and running with GitLab


Quickly set the status, assignee or milestone for multiple issues at the same time or easily filter them on any properties. See milestones and issues across projects.

Learn more about the Issue Tracker


Create and manage milestones at both the project and group levels, viewing all the issues for the milestone you’re currently working on, representing an Agile sprint or a release.

Learn more about Milestones

Confidential Issues

Keep your information secure with Confidential Issues. With GitLab, you can create confidential issues visible only for project members with Reporter access level or above.

Learn more about Confidential Issues

Related Issues

Explicitly mark issues as related, blocked, and blocking and track their status. Blocked issues are visible in the issue card view for easy identification.

Learn more about Related Issues

Move Issue to Another Project

You can move issues between projects in GitLab. All links, history and comments will be copied and the original issue will reference the newly moved issue. This makes working with multiple issue trackers much easier.

Learn more about moving issues between projects

Mark Issue as Duplicate

Mark an issue as a duplicate of another issue, closing it.

Learn more about marking duplicate issues

Quick Actions

GitLab provides a convenient way to change metadata of an issue or merge request without leaving the comment field with quick actions.

Documentation about quick actions

Rich Object Summary on Link Hover

View an information-rich summary by hovering over links to users, issues, merge requests, and other objects in GitLab.

See the epic that implements this

Create GitLab Branch from Jira Development Panel

Create a GitLab branch from within the development panel of a JIRA issue.

See issue

Create GitLab Merge Request from Jira Development Panel

Create a GitLab merge request from within the development panel of a JIRA issue.

See issue

Project Issue Board

GitLab has Issue Boards, each list of an Issue Board is based on a label that exists in your issue tracker. The Issue Board will therefore match the state of your issue tracker in a user-friendly way.

Learn more about GitLab Issue Boards

Time Tracking

Time Tracking in GitLab lets your team add estimates and record time spent on issues and merge requests.

Learn more about Time Tracking

Wiki based project documentation

A separate system for documentation called Wiki, is built right into each GitLab project. Every Wiki is a separate Git repository.

Learn more about GitLab Wikis

Design Management

Design Management allows users to upload design assets (such as wireframes and mockups) to GitLab Issues and keep them stored in one single place, giving product designers, managers, and engineers a seamless way to collaborate on design proposals. They can be easily uploaded and are stored in versions. You can start a thread by clicking on the image on the exact location you would like the discussion to be focused on.


Create new branches from issues

In GitLab, you can quickly create a new branch from an issue on the issue tracker. It will include the issue number and title automatically, making it easy to track which branch belongs to which issue.

See how in our documentation

Allow edits from upstream maintainers in a fork

When a user opens a merge request from a fork, they are given the option to allow upstream maintainers to collaborate with them on the source branch. This allows the maintainers of the upstream project to make small fixes or rebase branches before merging, reducing the back and forth of accepting community contributions.

Application performance monitoring

GitLab collects and displays performance metrics for deployed apps, leveraging Prometheus. Developers can determine the impact of a merge and keep an eye on their production systems, without leaving GitLab.

Learn more about monitoring deployed apps

Application performance alerts

GitLab allows engineers to seamlessly create service level indicator alerts and be notified of any desired events, all within the same workflow where they write their code.

Learn more about creating SLI alerts

GitLab Self-monitoring

GitLab comes out of the box enabled for Prometheus monitoring with extensive instrumentation, making it easy to ensure your GitLab deployment is responsive and healthy.

Learn more about GitLab self-monitoring

Value Stream Analytics

GitLab provides a dashboard that lets teams measure the time it takes to go from planning to monitoring. GitLab can provide this data because it has all the tools built-in: from the idea, to the CI, to code review, to deploy to production.

Learn more about Value Stream Analytics

Built-in Container Registry

GitLab Container Registry is a secure and private registry for Docker images. It allows for easy upload and download of images from GitLab CI. It is fully integrated with Git repository management. (Codefresh will be ending their support for private docker registries as of May 1, 2020

Documentation on Container Registry

Preview your changes with Review Apps

With GitLab CI/CD you can create a new environment for each one of your branches, speeding up your development process. Spin up dynamic environments for your merge requests with the ability to preview your branch in a live environment. Review Apps support both static and dynamic URLs.

Learn more about Review Apps

Environments Auto-stop

This feature allows users to configure an optional expiration date which can be set for review app environments.

Learn more about Environments auto-stop

New features every month

GitLab is updated with new features and improvements every month on the 22nd.

One integrated tool

Other tools require the integration of multiple 3rd party tools to complete the software development lifecycle. GitLab has a completely integrated solution that covers the entire development lifecycle.

Highly Available setups

For mission critical releases, you cannot afford downtime. Split your app servers, database, etc., into multiple instances and work in read-only mode during backups.

More information on High Availability

IPv6 ready

Both and GitLab Self-manages support IPv6.

Read the docs on configuring IPv6

AD / LDAP integration

Sync groups, manage SSH-keys, manage permissions, authentication and more. You can manage an entire GitLab instance through the LDAP / AD integration.

More information about AD / LDAP integration

Multiple LDAP / AD server support

Link multiple LDAP servers to GitLab for authentication and authorization

Advanced LDAP configuration

Multiple approvers in code review

In GitLab, to ensure strict code review, you can require a minimum number of users to approve of a merge request before it is able to be merged. You can undo an approval by removing it after the fact.

Approvals Documentation

Approval rules for code review

Make sure the right people review merge requests with approval rules by specifying lists of eligible approvers, the minimum number of approvals for each, and which target branches they protect. This makes it easy to request review from different teams like Engineering, UX and Product.

Approvals Documentation

Access to and ability to modify source code

GitLab Enterprise Edition is publicly readable, meaning you can scan or modify the code to meet your security and development needs. The code used by most other providers is proprietary, meaning you cannot edit or view the source code.

Read the GitLab Enterprise Edition license.

A comprehensive API

GitLab provides APIs for most features, allowing developers to create deeper integrations with the product.

Read our API Documentation

Search files with fuzzy file finder

GitLab provides a way to search a file in your repository in one keystroke.

Read about the file finder in our documentation

Advanced Global Search

Leverage Elasticsearch for faster, more advanced code search across your entire GitLab instance.

Learn more about Advanced Global Search

Advanced Syntax Search

Use advanced queries for more targeted search results.

Learn more about Advanced Syntax Search

Fast-forward merge with option to rebase

With this setting at the project level, you can ensure that no merge commits are created and all merges are fast-forwarded. When a fast-forward merge is not possible, the user is given the option to rebase.

Learn more about rebase before merge

Remote repository push mirroring

Mirror a repository from your local server to elsewhere. Push mirroring is supported via HTTP and SSH using password authentication, and using public-key authentication with SSH.

Learn more about repository push mirroring

Remote repository pull mirroring

Mirror a repository from a remote Git server to your local server, making it easy to keep local forks and replicas up to date.

Learn more about repository pull mirroring

Merge approvals

When a project requires multiple sign-offs, GitLab Enterprise Edition enables you to make sure every merge request is approved by one or more people. Merge request approvals allow you to set the number of necessary approvals and predefine a list of approvers that will need to approve every merge request in a project, and in-turn improve your code’s quality.

Learn more about merge request approvals

Disaster Recovery

Fail over in minutes to another data-center.

Learn more about Disaster Recovery

Granular user roles and flexible permissions

Manage access and permissions with five different user roles and settings for external users. Set permissions according to people’s role, rather than either read or write access to a repository. Don’t share the source code with people that only need access to the issue tracker.

Learn more about User Roles


Organize your repository into private, internal, or public projects.

Learn more about Projects

Merge Requests

Create merge requests and @mention team members to review and safely merge your changes.

Learn more about merge requests

Reject unsigned commits

GitLab Enterprise Edition Premium allows you to enforce GPG signatures by rejecting unsigned commits.

Read more about enforcing push rules

Verified Committer

Verify that a push only contains commits by the same user performing the push.

In development for GitLab. Follow this link for more information.

Based on Git, a distributed VCS

Git, on which GitLab is built, is fully distributed. Every user has a complete copy of the repository, allowing for much faster access to history, easier branching and an overall better experience.

Get started with Git

Protected branches

Granular permissions for branches you want to protect.

Read about protected branches


Contribute to projects faster by using the Web IDE to avoid context switching in your local development environment. The Web IDE is integrated with merge requests and GitLab CI so that you can resolve feedback, fix failing tests and preview changes live with client side evaluation without leaving the Web IDE.

Learn more about the Web IDE

Live Preview in the Web IDE

Preview changes as you make them to your JavaScript and static HTML projects with Live Preview in the Web IDE.

Learn more about the Web IDE

Web Terminal for Web IDE

Interact with your code in a Web Terminal in the Web IDE to inspect API responses, experiment in a REPL, or compile your code.

Learn more about the Web IDE Web Terminal

File Syncing to Web Terminal

Changes made in the Web IDE will now be synced to the Web Terminal. User changes made in the Web IDE can now be tested within the Web Terminal before committing them to the project.

Learn more about File Syncing to Web Terminal


Store and share code snippets to engage in a conversation about that piece of code. You can embed snippets on any blog or website using a single line of code.

Learn more about Snippets

Versioned Snippets

Collaborate online or locally and track changes across versions with git based Snippets.

Learn more about Snippets

Inline commenting and discussion resolution

Code or text review is faster and more effective with inline comments in merge requests. Leave comments and resolve discussions on specific lines of code. In GitLab, Merge Request inline comments are interpreted as a discussion and can be left on any line, changed or unchanged. You can configure your project to only accept merge requests when all discussions are resolved.

Learn more about resolving discussions

Cherry-picking changes

Cherry-pick any commit in the UI by simply clicking the Cherry-Pick button in a merged merge request or a specific commit.

Learn more about cherry picking merge requests

Activity Stream

View a list of the latest commits, merges, comments, and team members on your project.

Learn more about the Activity Stream

GPG Signed Commits

Sign commits and prove that a commit was performed by a certain user.

Read more about GPG signed commits

Subgroups: groups within groups

Create groups within groups to easily manage large numbers of people and projects.

Learn more about Subgroups

Object storage for LFS

LFS files can be stored on Object Storage (Amazon S3)

Learn how to store artifacts on object storage

Globally distributed cloning with GitLab Geo

When development teams are spread across two or more geographical locations, but their GitLab instance is in a single location, fetching and cloning large repositories can take a long time. Built for distributed teams, GitLab Geo allows for read-only mirrors of your GitLab instance, reducing the time it takes to clone and fetch large repos and improving your collaboration process.

Learn more about GitLab Geo

Support for High Availability

To avoid downtime, GitLab Enterprise Edition Premium offers support for High Availability (HA). A Service Engineer will help you identify your specific HA needs and map out an architecture.

Learn more about GitLab's High availability

Deploy Boards

GitLab Premium ships with Deploy Boards offering a consolidated view of the current health and status of each CI/CD environment running on Kubernetes. The status of each pod of your latest deployment is displayed seamlessly within GitLab without the need to access Kubernetes.

Learn more about Deploy Boards

You decide when you upgrade

GitLab releases a new version each month and lets you choose when to upgrade.

Learn how to upgrade your GitLab instance

Easy upgrade process

Using our official Linux repositories or the official Docker image, upgrading GitLab is a breeze.

Learn how to upgrade your GitLab instance

Automatically close issue(s) when a merge request is merged

With GitLab, you can use specific keywords to close one or more issues as soon as a merge request is merged.

Learn more about automatically closing issues

Work in Progress merge requests (WIP)

Prevent merge requests from accidentally being accepted before they’re completely ready by marking them as Work In Progress (WIP). This gives you all the code review power of merge requests, while protecting unfinished work.

Learn more about WIP MRs

Custom Git Hooks

Leverage the power of Git Hooks and chain them together to fire off custom scripts when certain actions occur on the repository. If the commit is declined or an error occurs during the Git hook check, the error message of the hook will be present in GitLab’s UI. GitLab supports all types of hooks.

Learn how to use Git Hooks with GitLab

Responsive-first design

GitLab is built with a responsive-first design approach. Be it on a desktop, tablet or smartphone, GitLab is optimized to be viewed for the best result.

Community based, users can help shape the product

GitLab has open issue trackers for almost all of its operations. From GitLab itself to infrastructure and marketing, you can help shape the product.

View all GitLab contributors

Git LFS 2.0 support

Manage large files such as audio, video and graphics files with the help of Git LFS. Git LFS 2.0 file locking support helps large teams work with binary assets and is integrated with our native file locking feature.

Learn more about Git LFS support in GitLab

Create projects with Git push

Push new projects to the desired location and a new private project will automatically be created.

Learn more about creating Projects

SAML SSO for Groups

Connect a group in GitLab to a SAML identity provider to manage authentication.

Learn more about LDAP group synchronization

View Kubernetes pod logs

The monitoring of servers, application, network and security devices via generated log files to identify errors and problems for analysis. GitLab makes it easy to view the logs of running pods in connected Kubernetes clusters. By displaying the logs directly in GitLab, developers can avoid having to manage console tools or jump to a different interface.

Learn more about viewing Kubernetes pod logs

Mercurial repository hosting

Hosts Mercurial DVCS repositories.

See the GitLab issue to implement this

Restrict access by IP address

Restrict access at the group level to incoming traffic adhering to an IP address subnet, keeping your code secure.

Learn more about restricting access by IP address

Enforced Two-factor Authentication (2FA)

Two-factor authentication secures your account by requiring a second confirmation, in addition to your password. That second step means your account stays secure even if your password is compromised. The ability to enforce 2FA provides further security by making sure all users are using it.

Learn more about Enforced GitLab 2FA

IP Whitelisting

IP Whitelisting defines safe IP network addresses from which clients can access and interact with the repository server. This helps prevent unwanted third parties from accessing your account even if they have acquired a team member’s email address and password.

See the GitLab issue to implement this

Git protocol v2 support

Git’s wire protocol defines how clones, fetches and pushes are communicated between the client and server. Git protocol v2 improves performance of fetch commands and enables future protocol improvements.

Learn more about Git protocol v2

Partial Clone

Partial Clone is an optimization for very large repositories.

Learn more about Partial Clone

S/MIME Signed Commits

Sign commits and prove that a commit was performed by a certain user.

Read more about S/MIME signed commits

If you feel there are inaccurate statements in this comparison or a tool missing, please edit this page or propose edits by opening an issue. You can also send an email to with your suggested edits if you're unable to open an issue or edit this page.

We strive for technical accuracy and will review and update this post for inaccuracies as quickly as possible.

GitLab is the trademark of GitLab, Inc. All other logos and trademarks are the logos and trademarks of their respective owners.

Try GitLab Ultimate risk-free for 30 days.

No credit card required. Have questions? Contact us.

Try GitLab risk-free for 30 days.

No credit card required. Have questions? Contact us.

Gitlab x icon svg