Software development projects are based on teamwork. All members should know what the others are doing and freely access code written by their colleagues. It is possible with version control systems – software that allows documenting changes in code and uploading new versions.
A service that stores projects to enable access to several computers and developers is called a project hosting service. All serious development and scientific projects rely on these platforms – they allow keeping track of the team’s work and accessing code from any device.
When we talk about collaborative work and file sharing, the first services coming to mind are Dropbox and Google Drive. These systems are easy to pick up, have an intuitive interface, and allow control over files. However, they are not adapted to the needs of developers.
In particular, Google Drive and Dropbox don’t have a detailed version tracking system. It’s difficult to merge all the edits, get a simultaneous view of multiple versions, and see the impact on performance. There are systems much better suited for this task – GitHub, Git Lab, and BitBucket.
The majority of popular version-control tools rely on Git – a system for distributed version control. The aim is to help teams track changes and improve collaboration among developers. Git’s creation aim is to facilitate cooperation and provide open-source communities with tools. Files tend to get thicker with time as versions get merged and verified.
Although Git is described as a version control system, to make it simpler, we can break this definition into three components:
Control system: Git is a system that helps community members track content (updates, participants, etc.). A control system allows storing code and displaying changes to it.
Version control system: developers consistently add more code in Git; often, many users work simultaneously (parallel editing). A version control system maintains a real-time history of these changes, allowing to merge edits and branch versions.
Distributed version control system: all versions are stored in repositories – one on the Cloud, accessible to everybody, and one local, accessible on the developer’s device. This is convenient because if there’s a problem with a server or Internet connection, users can still access their work.
In a nutshell, Git is a system that stores code, tracks its changes in real-time, and synchronizes updates on local and Cloud repositories. It’s not a particular service – that’s the difference between Git and GitHub – rather, a technology. The Git vs GitHub distinction is that GitHub is a service that uses Git – but other services can and do use Git as well.
Git Definitions You Need to Know
Before we start comparing individual services, it makes sense to take a look at the overall terminology. GitHub, GitLab, and BitBucket may differ in their offer or specific features, but the key principles remain the same. Since they are universal for all three platforms, let’s do a brief review.
A local repository is storage where your code will be stored. You can think of it as a folder on your computer. Like any local folder, it can be accessed with no Internet connection, but only from that device.
To share code with other developers, you need a remote repository. It’s a copy of your local files that will be stored on the Cloud and available for collaboration.
File staging is the process of preparing files to transfer into a remote repository. Developers define which files they would like to be shared, make sure they are named and saved correctly.
Git commit the process of saving changes in the local repository.
File push is the process of transferring files to the remote repository. Commits include information on file changes that were performed on the newly committed version.
Git status is a command that allows seeing which files are modified and what of those are in the staging area, ready to be committed.
Git log is a command used to see all the commits performed by a user. Developers can see which code versions are available for collaborative editing.
Merging refers to joining two commit histories. These can be very useful when you need to upload parallel edits into a single file. No progress is lost.
Pull request allows developers to let other developers know the updates made to the codebase.
Hopefully, these definitions gave you a basic idea of what Git-based services are mainly capable of and how they approach it practically. All the processes described above require commands to get started. If you’d like to see a quick guide for creating and sharing a simple repository in Git, take a look at this guide.
So, to clear doubts on what Git and GitHub are, let’s introduce GitHub properly. GitHub is the largest Git-based version-control platform. Now it hosts more than 38 million projects and is most commonly used by open-source communities.
GitHub has a simple User Interface that quickly gets developers in the flow of working with Git algorithms. Another defining characteristic is its speed – the service pushes and pulls requests and merges versions quickly.
The free version of GitHub allows developers to work with public and private repositories, contribute to them, and collaborate. The cost depends on the number of users.
Like GitHub, BitBucket was launched in 2008. It was created by an Australian team and later acquired by Atlassian in 2010. However, the service didn’t support Git-based version control up to 2011.
The main selling point of BitBucket is the possibility to host an unlimited number of private repositories for small teams (1-5 users). However, Bitbucket’s UI originally was not as straightforward as GitHub’s, and the functionality was underdeveloped. Now, however, the two services are getting increasingly more similar – and BitBucket’s popularity is growing.
GitLab was founded in 2011 as an alternative to GitHub and BitBucket. Its main selling point is extensive functionality, which is neatly packed into a great UI regardless of its versatility.
Recently, teams have been actively switching to GitLab from other services. Particularly due to GitLab’s seamless support of CI pipeline and Docker (and the use of those has grown tremendously lately).
Comparing Gitlab vs Github, the latter’s weak spots are popularity (the community is not nearly as active) and speed.
Let’s take a look at the features of all three platforms. A lot of them will be recurring – to make a comparison more evident, we’ll specifically highlight all the unique points. Still, we believe that an educated comparison requires a full overview of functionality – so you understand what to work with.
The major functionality of GitHub is repository branching and forking, pull and merge requests, codebase cloning. The main functionality works quickly – perhaps, the fastest among the three. Developers can quickly upload files to remote repositories and receive immediate notifications from other contributors.
GitHub also has wiki support – a built-in tool for making and sharing version documentation. The service supports several text formats, including Markdown.
- Issue tracker that detects problems within the codebase and alerts collaborators;
- Issue boards support Kanban and Scrum and allow structuring tasks;
- GitHub supports epics that allow tracking the progress of the team;
- Roadmaps help to plan team projects and pinpoint key milestones;
- Estimation and points: developers can estimate effort points for each issue and share details with collaborators;
- Synchronizing merged versions, GitHub issues, and pull requests;
- Desktop applications for Windows and Mac, as well as a mobile app for Android
- The support of 200+ programming languages
- Integrations with Asana, AWS, Windows Azure, Google Cloud, Code Climate
- GitHub Pages is a built-in service for building and hosting sites with GitHub.
- Syntax highlighting (isn’t present in BitBucket)
- Popular open-source communities.
GitHub offers a lot of add-ons for increasing development productivity and improving collaboration. Arguably, BitBucket comes even further in this direction, while GitLab simply offers more options. However, while GitHub doesn’t have the most versatile functionality, it offers the fastest performance.
Also, after Microsoft acquired Github, a lot of users began to wonder: is GitHub safe, especially for open-source communities? For now, there hasn’t been any reason to believe there are any safety issues in the platform. If you’d like to see how exactly GitHub protects users, we recommend taking a look at their official presentation.
BitBucket was founded as a platform for Mercurian version control. Mercurial is another version control system, a much less popular Git alternative. Now, the platform stopped supporting Mercurian and focused entirely on Git.
BitBucket allows developers to host code on private and public repositories. Users can create an unlimited number of private repositories – as long as no more than 5 users use them. The main distinction of this platform is its integration with Jira and Asana. Ever since Atlassian acquired BitBucket, it has become a native component of their ecosystem.
As a result, developers can easily monitor BitBucket activity in Jira, measure their productivity, and connect organization boards to collaborative repositories. It’s convenient because project managers can easily keep track of the project’s organizational and tech aspects.
- Pipelines is a CI/CD service that displays the entire development life cycle of the product. On BitBucket, developers can track the deployment progress of the software.
- Branch permissions: developers can allow specific people access to a repository;
- Integrations with Slack, Bamboo, Jenkins, HipChat, Crucible, and other tools;
- A Mac and Windows client, and an Android app, called Bit Beaker;
- BitBucket Snippets: the creation of snippets for the codebase;
- Documentation and wiki;
- Search panel for codebase navigation;
- A lot of add-ons on the Atlassian marketplace, most of which can be easily integrated within the entire ecosystem.
In our opinion, the main advantage of using BitBucket is the simplicity of the management project. Both business owners and project managers save a lot of time when they can see repository files directly in Jira. Also, BitBucket makes good use of many Jira features, including reporting and communication.
The popularity of GitLab is growing due to the increased adoption of CI/CD and DevOps. Other code repositories offer CI features in their premium versions, but in GitLab, CI support is included in a free plan. Also, developers can host CI GitLab integration on their servers.
- Subgroups, compliance management, and audit events: GitLab allows restricting access to projects and viewing the compliance status of each participant;
- Project planning: developers track code issues with built-in task lists, description templates, and issue management panels;
- Communication: developers can exchange attached files, create threads and participate in them, track changes, prioritize discussions with labels, set milestones, and finalize iterations;
- Source code management: GitLab is appreciated for its intuitive interface for branching, merging, file locking, reporting. GitLab also offers free source code templates and JIRA integrations;
- Continuous integration: the main selling points of the platform are free CI tools, including parent-child pipelines, horizontal autoscaling, visualization of HTML artifacts and protected variables, etc.;
- Package building: developers can use separate packages depending on their tech stack – there’s a package for PHP, Node.js, Java, and others;
- Security: GitLab provides security scans, allows dynamic security testing (however, only in the most expensive Gold and Ultimate plans);
- Configuration and DevOps: the Auto DevOps feature is available in the free plan, whereas the specialized add-ons are supported only by Gold and Ultimate plans.
GitLab is known for its excellent interface and functionality – in particular, the major difference between GitLab and GitHub is extensive DevOps and CI/CD free functionality. However, accessing main functionality and performing fast pushes and merges can be a struggle.
Generally, developers agree that GitLab and GitHub have the best interface. Many developers prefer GitHub because it’s more popular and they are used to the navigation. However, teams using Jira benefit from having seamless integrations with the Atlassian ecosystem – so BitBucket is a natural choice.
So, here’s a short summary of each platform’s interface:
- GitHub: a lot of guides and tutorials, basic functionality can be accessed quickly, the interface is minimalistic and easy-to-understand. The downside is the lack of native integrations with Jira and a lack of advanced CI features.
- BitBucket: the interface can be confusing, but as the platform becomes more popular, there are a lot more resources. Teams who use Jira often prefer BitBucket because it provides much better visibility of the overall project.
- GitLab: the service isn’t as established as competitors’, so interface guides and tutorials are still lacking. However, the interface itself is very well-organized – even advanced add-ons are easy to locate.
Viewing commits and committing code
All three platforms have paid and free versions. Let’s take a look at the pricing plans and the features included. Keep in mind that all services charge per user, not per team. So, you need to multiply the subscription cost by the number of people on the team.
- Free: unlimited public and private repositories, unlimited number of collaborators, 500MB of storage;
- Team ($4/month): 2GB of repositories and all features of the free plan;
- Enterprise ($12/month): all features of the Team plan, 50GB of storage, advanced auditing, and SAML;
- GitHub One (the custom pricing): the ultimate plan giving access to 24/7 official support, enhanced security, and continuous learning bonuses.
- Free ($0 per month): up to 5 users for private repositories, 50 build minutes per month, 1GB of file storage, Jira software integration, CI/CD features
- Standard ($3 per month): unlimited number of users, 2,500 min of build minutes per month, Jira Integration, Unlimited pull requests, all features of a free plan;
- Premium ($6 per month): all features of the Team plan, but also customer support, merge checks, etc
- Free ($0/month): supports all DevOps stages, the support of custom CI runners, unlimited number of repositories, 400 CI/CD minutes;
- Free+ ($4/month): supports all features in the team plan, 2,000 CI/CD coding minutes
- Bronze/Starter ($4/month): support of 10,000 CI/CD minutes, many approval roles, support of priority and multi-region;
- Silver/Premium ($19/month): also known as an enterprise plan, this one offers enhanced security, executive insights, compliance checks, guest users, and 50,000 CI/CD minutes.
_Summary of pricing comparison-
Among these platforms, BitBucket offers the most competitive prices. GitHub, however, has been showing the trend of decreasing prices. In fact, costs described in the article were updated fairly recently – in April 2020.
- GitHub: great for personal projects and small teams;
- BitBucket: small and medium-size teams who use Jira and Asana;
- GitLab: medium teams and enterprises who work with CI/CD tools.
Even though the tool’s popularity doesn’t matter that much in the development process itself, it’s best to motivate your developers to learn trending instruments. It’s going to be easier to recruit candidates who have experience working with the service, introduce new practices, and drive transformation in the organization.
So, let’s take a look at current popularity, growth dynamics, future trends, and user profiles. The number of users is important, but it’s also great to know who these users are. For instance, GitHub is known as a go-to destination for Ruby and Ruby on Rails developers because it hosts most gems and add-ons.
GitHub is the biggest code repository, used both by organizations for private access and open-source collaboration. The platform is so popular that people often think it’s synonymous with Git itself – hence, the Git versus GitHub doubts emerge. According to Statista, GitHub hosts leading open-source tools, including Flutter, Microsoft’s VS Code and Azure Docs, Facebook’s React Native, Tensor Flow, Kubernetes, and others.
Currently, GitHub is used by 40 million users, according to the data released in January 2020. It’s used by Microsoft, Facebook, Google, and other large corporations. In terms of popularity, this distributed version control service is the leader.
According to Google Trends, the popularity of GitHub has been fairly consistent over the last two years. The community will likely keep growing.
Jira’s popularity is constantly growing, and this trend is driving new users to BitBucket as well. BitBucket is used by Slack, Accenture, Figma, Paypal, and other companies. The open-source community on BitBucket is much less developed. Typical clients of the platform are active users of the Atlassian ecosystem – not open-source contributors.
Unfortunately, BitBucket doesn’t publish regular statistics on the number of users. According to their official news, in 2019, the product was used by 10 million developers. According to search trends, the service’s popularity nowadays is lower than GitHub’s or GitLab’s.
According to GitLab’s case studies page, the tool is used by Drupal, Ticketmaster, BI Worldwide, and other enterprises.
Here’s the list of open-source initiatives hosted on GitLab. Rather than big business projects, it accommodates scientific initiatives and NGOs.
Unfortunately, GitLab doesn’t have official statistics on user count. According to some sources, the service is used by 200,000 – 500,000 organizations and developers. As for Google search trends, the service gets more mentions than BitBucket but much less than GitHub.
If you would like to implement GitHub, GitLab, or BitBucket in your own project, consider contacting professional developers who have experience with all three – they can help you make the right choice. Our team would be happy to analyze your project, team size, software demands, workflow and find the repository platform that fits your needs. Drop us a line to start discussing your project and get an experience-driven estimate.