Recent GitHub Announcements
GitHub Satellite Event
On May 6, GitHub made several feature announcements at their GitHub Satellite Event. Here's GitLab's blog post about their event.
GitHub Teams for Free
On April 14, 2020, GitHub announced that GitHub is now free for teams. GitLab has been free for teams/organizations since its inception. Read GitLab's blog post response and #GitChallenge on this move by GitHub.
GitHub-GitLab Comparison Infographic
Here's an infographic we put together that compares GitHub and GitLab. The methodology used to build this chart can be found here. More detailed comparisons and commentary on strenghts, gaps etc. are in sections below.

Note: This chart was developed by comparing the feature categories supported by GitLab and GitHub. For example, the ratio "5/7" for GitLab in Plan stage indicates support for 5 out of 7 feature categories within that DevOps Lifecycle Stage. We then applied certain % thresholds to color code the bars. In keeping with GitLab value of transparency, we applied this scoring methodology both to GitLab and GitHub capabilities, which is the reason you will see in some cases GitLab scores less than perfect scores. If you have questions about the analysis or additional inputs please feel free to submit an issue by clicking the link at the bottom of this page or writing a comment.
On this page
- Recent GitHub Announcements
- GitHub-GitLab Comparison Infographic
- Overview
- Summary
- GitHub Strengths
- GitHub Gaps
- GitHub Actions Gaps
- GitLab Scaling, HA and Zero-Downtime Upgrade Capabilities
- Announcements
- Resources
- Comparison
Overview
Across full lifecycle
Only SCM
Additional cost for private
Additional cost for private
Azure Container Registry
Azure Monitor
Azure Security Center
Azure Security Center
Azure Security Center
Azure Security Center
Azure Security Center
Summary
GitLab vs. GitHub - a comparison video created by an independent external source (LinuxHint.com).
GitHub is a collaborative code repository to host and review code, manage projects and build software. It offers all of the distributed version control and source code management (SCM) functionality of Git as well as adding its own features. It provides access control and several collaboration features such as bug tracking, feature requests, task management, and wikis for every project.
In November 2019, GitHub announced general availability of GitHub Actions for all users. GitHub Actions feature enables code snippets to be run in a container upon a wide variety of GitHub API calls. This has the promise of enabling users to orchestrate their workflows based on any event. With GitHub Actions, workflows and steps are just code in a repository. Actions enable GitHub to offer CI/CD, which makes it easier to automate how you build, test, and deploy your projects and includes runner support for Linux, macOS, and Windows. It runs your workflows in a container or in a virtual machine.
Similarly, GitLab has integrated CI/CD, but also offers additional capabilities such as application performance and server monitoring. GitLab also includes static and dynamic security testing and container scanning.
GitHub does not come with a deployment platform and needs additional applications, like Heroku, in order to deploy applications. GitLab leverages Kubernetes to create a seamless deployment experience in a single application.
GitHub offers plans for both private repositories and free accounts which are commonly used to host open-source software projects.
As of September 2019, GitHub reports having over 40 million developers. Although Developers are defined as "Developers are individual user accounts on GitHub, regardless of their activity." and 100 million repositories (including 28 million public repositories), making it the largest host of source code in the world.
GitHub is also offered in a self-managed version called GitHub Enterprise (GHE).
Microsoft acquired GitHub on June 4, 2018.
GitHub Strengths
- Large user base of developers using GitHub.
- Many Open Source projects hosted on GitHub, although GitHub itself is not Open Source.
GitHub Gaps
- End to End DevOps: GitHub requires multiple tools stitched together to provide an end to end DevOps solution. GitLab provides a single platform for DevOps, with tools for different stages pre-integrated and working seamlessly.
- Scaling: Feedback from GitHub customers is that GitHub Enterprise (GHE) has trouble scaling. essentially is in a single box. The only way to scale the system is by adding more CPU and memory. This taps out at some scale. Data suggests GitHub is unable to scale beyond 2000 users in many instances. After maximizing CPU and memory in a single box, the only way to scale is to add separate boxes or decentralize. This leads to code fragmentation. GitLab is enterprise class and scales to > 32K users.
- High Availability: GitHub HA solution is at best a warm-standby. This approach could lead to more downtime and even information loss if backups are not made frequently.
- Zero Downtime Upgrades: GitHub does not provide Zero Downtime Upgrades, with downtime for upgrades lasting as many as four hours. This is a major requirement for most enterprises. GitLab provides Zero Downtime upgrades.
- As a large repository of Open Source projects, GitHub itself is not Open Source. Making customers dependent solely on GitHub for product improvements.
GitHub Actions Gaps
Source: GitHub Actions Community Forum
The following table lists key gaps in GitHub Actions and its associated impact. This information is derived from user feedback in GitHub Actions Community Group and was assimilated on April 10, 2020.
| Description | Impact | Reference |
|---|---|---|
| Continuous Integration | ||
| Issues That Increase Build Time | ||
| GitHub Actions does not support [skip ci] | Trivial changes can trigger long build times because the CI step is automatically kicked off. | GitHub Community Discussion |
| Cannot Auto-Cancel Redundant Builds | When a newer build is triggered on the same branch does not cancel running builds and start on the new one. Increased build times and compute resources | GitHub Community Discussion |
| Unable to cache artifacts within repo for reuse in subsequent builds | Slower build times because a docker image needs to be rebuilt each time or fetched from hub, instead of using cached version in repo. | GitHub Community Discussion |
| Caching files between GitHub Actions executions is limited to 200 MB | Projects and builds take longer to run. | GitHub Community Discussion |
| Continue on Error does not notify in UI | Allowable errors are not flagged in UI, have to review logs. | GitHub Community Discussion |
| Cannot retry a build that failed | Increases idle times between re-tries due to need for manual monitoring and manual trigger of retry. | GitHub Community Discussion |
| Github Actions cannot pull from private docker repositories (AWS ECR, Docker Hub, GC Container Registry) | Increases build times. | GitHub Community Discussion |
| GitHub Actions Build Caching - Docker Layers | Builds take longer because container image is built from scratch. | GitHub Community Discussion |
| Issues That Increase Operational Costs | ||
| Cannot specify dependency running in another workflow | Cannot reuse code, code duplication and several if conditions are necessary, which complicates workflow definition. | GitHub Community Discussion |
| Actions cannot be accessed across other private repositories even when repos are within the same organization. | Hard to reuse code. Need hard to implement workarounds to overcome this limitation | GitHub Community Discussion |
| Cannot delete individual workflow runs from UI | Persistence of failed workflow runs adds to clutter and reduces manageability. | GitHub Community Discussion |
| Continuous Delivery | ||
| Issues That Increase Delivery Time | ||
| Unable to re-run just a single job in a workflow | For example, cannot re-run just some of the failed tests. Users have to rerun the entire workflow, resulting in wasted time/loss of productivity. In a workflow with 10 jobs, you have to re-run all 10. | GitHub Community Discussion |
| Issues That Increase Operational Costs | ||
| Cannot easily trigger different workflows for staging and production environment | Conditional workflows are hard to implement and maintain because GitHub Actions Events do not have types associated with it. Have to implement series of if conditions in the workflow. | GitHub Community Discussion |
| Cannot trigger a new workflow from another workflow using the repository's GITHUB_TOKEN. Options are to 1) create a bot user and use a personal access token or 2) create a github app. | Cannot easily kick off tests after a code push. Must use one of the prescribed workarounds. | GitHub Community Discussion |
| Cannot trigger actions via Pull Request Messages/Comment | E.g. User does not want some Actions that take long to run to fire on every pull request. Instead add a comment in the PR to prevent certain actions from running. | GitHub Community Discussion |
| Lack of support for YAML anchors and aliases | Prevents code reuse. To overcome this limitation users need to cut and paste code, 5x the workflow size, difficult to maintain. | GitHub Community Discussion |
| Issues That Increase Risk | ||
| Cannot manually trigger a workflow execution. | Limits ability to manually trigger to production but allow automated triggers to other environments. | GitHub Community Discussion |
| Enterprise Readiness | ||
| Issues That Increase Risk | ||
| Making secrets availabe to builds of forks | Increased security vulnerability due to work arounds such as including token in plain text in workflows. | GitHub Community Discussion |
| GitHub Actions requires credentials for accessing Docker Images from a public repository. Works manually through UI. | Need a separate Docker Registry as a workaround. GitHub Packages cannot be accessed through Actions without credentials. | GitHub Community Discussion |
| Issues That Increase Operational Cost | ||
| GitHub Action support in GitHub Enterprise Server | GitHub Actions does not work in GitHub Enterprise Server, currently only available in GitHub Enterprise Cloud | GitHub Community Discussion |
| Selectively delete artifacts from UI or store artificats for less than 90 days | Increased storage needs leads to higher pricing. Teams can also be blocked because they have reached artifacts limit. Must write special scripts or manage artificats post build to reduce storage. | GitHub Community Discussion |
GitLab Scaling, HA and Zero-Downtime Upgrade Capabilities
- Scaling: GitLab GitLab is enterprise class and scales to > 32K users. Here's a link to the architecture when deployed in Amazon. This feature when used with Amazon's AutoScaling feature ensures that you can have nodes turned on and off as needed based on demand. This leads to significant cost savings, while maintaining the developer experience from a performance standpoint. GitLab runners are also mutable, one can spin up runners as needed and only pay for what one needs to use.
- High-Availability: GitLab provides HA from two standpoints. First the Application itself is Highly Available through seamless failovers into remaining nodes. Second, the data is highly available through the use of Gitaly. Gitaly is a service that provides high-level RPC access to Git repositories. GitLab fails over seamlessly - if a Gitaly node or another node drops there is no downtime. In case of a catastrophic event, GitLab can fail over to another Geo. This process in case of catastropic failure takes only 5-20 minutes. Business is up and running at full speed without problems.
- Zero-Downtime Upgrades: Due to the strong HA architecture GitLab is able to provide zero downtime upgrades.
Announcements
- 2020-04-14 - GitHub announces that it is now Free for Teams.
- 2019-11 - GitHub announces general availability of GitHub Actions for all users.
- 2019-05-10 - GitHub announces a limited public beta for GitHub Package Registry. From the website: "With GitHub Package Registry you can safely publish and consume packages within your organization or with the entire world."
- 2018-09-10 - GitHub announces that Microsoft Azure Pipelines are available in the GitHub Marketplace. This is in parallel with Microsoft (who recently acquired GitHub) announcing their Azure DevOps (rebranded VSTS/TFS). Related? Yes!
- 2018-09-10 - Microsoft announces the addition of GitHub Pull Requests integrated directly into Visual Studio Code. Visual Studio Code is Microsoft's lightweight (but still not web based) code editor.
- 2018-06-04 - Microsoft acquires GitHub.
Resources
- GitHub Website
- How GitLab is Enterprise Class - written with GitHub Enterprise claims in mind
- GitHub Package Registry
- GitHub Actions page
Comparison
| FEATURES |
|
|
|---|---|---|
|
Free CI/CD with shared or personal Runners
GitLab.com 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. |
|
|
|
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. |
|
|
|
Innersourcing
Internal projects in GitLab allow you to promote innersourcing of your internal repositories. |
|
|
|
Commit graph and reporting tools
GitLab provides commit graphs and reporting tools about collaborators’ work. |
|
|
|
Availability
GitLab.com 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. |
|
|
|
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. |
|
|
|
Export projects
GitLab allows you to export your project to other systems. |
|
|
|
Issues
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. |
|
|
|
Description Templates
By adding a description template to your issues or merge requests, users who create a new issue or merge request can select a template to help them to communicate effectively. |
|
|
|
GitLab Flavored Markdown
GitLab uses ‘GitLab Flavored Markdown’ (GFM). It extends the standard Markdown in a few significant ways to add some useful functionality. |
|
|
|
Labels
Labels provide an easy way to categorize issues, merge requests, or epics based on descriptive titles as ‘bug’, or ‘documentation’. |
|
|
|
Issue Weights
GitLab lets you manage issues using Agile practices by setting the weight of an issue. |
|
|
|
Milestones
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. |
|
|
|
Issue Due Dates
In GitLab, you can set a due date for individual issues. This is very convenient if you have small tasks with a specific deadline. |
|
|
|
Multiple Issue Assignees
Assign more than one person to an issue at a time. |
|
|
|
Lock Discussion
Lock down continued discussion in an issue or merge request as a Master role or higher, to prevent further abuse, spam, or unproductive collaboration. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
Mark Issue as Duplicate
Mark an issue as a duplicate of another issue, closing it. |
|
|
|
Export Issues CSV file
Issues can be exported as CSV from GitLab and are sent to your default notification email as an attachment. |
|
|
|
Burndown Charts
GitLab provides Burndown Charts as part of Milestones. This allows users to better track progress during a sprint or while working on a new version of their software. |
|
|
|
Quick Actions
GitLab provides a convenient way to change metadata of an issue or merge request without leaving the comment field with quick actions. |
|
|
|
Todos
When a user is mentioned in or assigned to an issue or merge request it will be included in the user Todos, making the development workflow faster and easier to track. |
|
|
|
Track Comment Changes
View the full history of comment updates. |
|
|
|
Drag and Drop Tasks
Drag and drop tasks in a task list. |
|
|
|
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. |
|
|
|
Create GitLab Branch from Jira Development Panel
Create a GitLab branch from within the development panel of a JIRA issue. |
|
|
|
Create GitLab Merge Request from Jira Development Panel
Create a GitLab merge request from within the development panel of a JIRA 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. |
|
|
|
Time Tracking
Time Tracking in GitLab lets your team add estimates and record time spent on issues and merge requests. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
Image Discussions
Within a commit view or a merge request diff view, and with respect to a specific location of an image, you can have a resolvable discussion. Have multiple discussions specifying different areas of an image. |
|
|
|
Merge Request Commit Discussions
Comment on a commit within the context of a merge request itself |
|
|
|
First time contributor badge
Highlight first-time contributors in a project. |
|
|
|
SUPPORT file link
Link from new issues to a SUPPORT file, pointing to support resources. |
|
|
|
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 |
|
|
|
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. |
|
|
|
Environments Auto-stop
This feature allows users to configure an optional expiration date which can be set for review app environments. |
|
|
|
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. |
|
|
|
Access to the server
You have complete control of the server/instance, so you can install additional software (intrusion detection, performance monitoring, etc.) and view log files on the server itself. GitLab’s advanced log system means everything gets logged and provides you with easy access to a wealth of log file information. |
|
|
|
Runs on metal
GitLab can run on bare metal servers where you can have control of the disk I/O, CPU, RAM, etc. Scale horizontally without an issue. |
|
|
|
Run your own software on your instance
You are free to run your own software on the instance that GitLab is running on. Have your own intrusion detection system? No problem. |
|
|
|
Use your configuration management software
You can use your choice of configuration management software, from Puppet, Chef, Ansible for quick and straightforward implementation. |
|
|
|
Use standard Unix tools for maintenance and monitoring
Use the tools you know for monitoring and maintenance, whether they’re standard or your own. GitLab doesn’t restrict you. |
|
|
|
IPv6 ready
Both GitLab.com and GitLab Self-manages support 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. |
|
|
|
Multiple LDAP / AD server support
Link multiple LDAP servers to GitLab for authentication and authorization |
|
|
|
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. |
|
|
|
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. |
|
|
|
Ease of migration from other providers
GitLab lets you easily migrate all repos, issues and merge request data from your previous provider. |
|
|
|
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. |
|
|
|
A comprehensive API
GitLab provides APIs for most features, allowing developers to create deeper integrations with the product. |
|
|
|
Search files with fuzzy file finder
GitLab provides a way to search a file in your repository in one keystroke. |
|
|
|
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. |
|
|
|
Squash and merge
Combine commits into one so that main branch has a simpler to follow and revert history. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
Audit Logs
To maintain the integrity of your code, GitLab Enterprise Edition Premium gives admins the ability to view any modifications made within the GitLab server in an advanced audit log system, so you can control, analyze and track every change. |
|
|
|
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. |
|
|
|
Merge conflict resolution
Preview merge conflicts in the GitLab UI and tell Git which version to use. |
|
|
|
Reject unsigned commits
GitLab Enterprise Edition Premium allows you to enforce GPG signatures by rejecting unsigned commits. |
|
|
|
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. |
|
|
|
Navigate to method/function in a merge request diff
When viewing a merge request diff, navigate directly to a method/function in a changed file. |
|
|
|
Merge when pipeline succeeds
When reviewing a merge request that looks ready to merge but still has one or more CI/CD jobs running, you can set it to be merged automatically when the jobs pipeline succeeds. |
|
|
|
Revert specific commits or a merge request from the UI
Revert any commit or a single merge request from GitLab’s UI, with a click of a button. Learn how to revert a commit or a merge request from the GitLab UI. |
|
|
|
Web IDE
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
EditorConfig in the Web IDE
The Web IDE supports the use of |
|
|
|
Paste images in Markdown in the Web IDE
When editing Markdown files in the Web IDE you can now paste images into the content so that they’ll be automatically uploaded and referenced in the content. |
|
|
|
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. |
|
|
|
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. |
|
|
|
GPG Signed Commits
Sign commits and prove that a commit was performed by a certain user. |
|
|
|
Subgroups: groups within groups
Create groups within groups to easily manage large numbers of people and projects. |
|
|
|
Container debugging with an integrated web terminal
Easily debug your containers in any of your environments using the built-in GitLab Web Terminal. GitLab can open a terminal session directly from your environment if your application is deployed on Kubernetes. This is a very powerful feature where you can quickly debug issues without leaving the comfort of your web browser. |
|
|
|
Scheduled triggering of pipelines
You can make your pipelines run on a schedule in a cron-like environment. |
|
|
|
Publish static websites for free with GitLab Pages
GitLab Pages provides an easy system for hosting static sites using GitLab repositories and GitLab CI, complete with custom domains, access control, and HTTPS support. |
|
|
|
Keep track of releases using GitLab Releases
GitLab’s Releases feature allow you to track deliverables in your project. Consider them a snapshot in time of the source, build output, and other metadata or artifacts associated with a released version of your code, and receive notifications when new releases are available for projects you track, including for guests of your project. |
|
|
|
Publish your website from a private project for free
With GitLab Pages, you can create a private repository to hold your site content, and keep only the page source (HTML) available online. |
|
|
|
Custom domains for GitLab Pages
With GitLab Pages websites, you can use a custom domain or subdomain. |
|
|
|
Multiple custom domains for GitLab Pages
GitLab Pages allows you to add as many custom domains (known as domain aliases) pointing to a single website. A domain alias is like having multiple front doors to one location. Learn how to add custom domains to your GitLab Pages website |
|
|
|
Secure custom domains (HTTPS) with GitLab Pages
Install a SSL/TLS certificate, at no cost, on a website set up with a custom domain served by GitLab Pages. Learn how to add an SSL/TLS certificate to your GitLab Pages website |
|
|
|
GitLab Pages custom domains verification
When adding a new custom domain, users must add an associated TXT record in order to verify they are the owner of the domain. That mechanism is used to prevent users from claiming domains they do not own. |
|
|
|
GitLab Pages support all Static Site Generators
With GitLab, you can build any SSG, and also choose specific SSGs’ versions you want your site to build with (e.g. Middleman 4.1.1). |
|
|
|
GitLab Pages example projects
Choose an example project to fork and get started with GitLab Pages. Watch a 3-min video tutorial on how to get started with GitLab Pages by forking a project |
|
|
|
GitLab Pages Templates for Static Site Generators
For those not interested in forking a project, GitLab Pages also offers templates for Gitbook, Hugo, Jekyll, Gatsby, and PlainHTML to start your Pages site from a template. Watch a 2-minute video on getting your Pages site running with a GitLab template |
|
|
|
GitLab Pages supports all Jekyll plugins
Besides building any Jekyll version you want, with GitLab Pages you can use all Jekyll plugins available. |
|
|
|
Access control for GitLab Pages
GitLab Pages allows you to set up custom access control for your site. |
|
|
|
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. |
|
|
|
Control
Take control of maintenance downtime, don’t be at the mercy of your hosting provider. Control how and where your code is backed up and stored. |
|
|
|
You decide when you upgrade
GitLab releases a new version each month and lets you choose when to upgrade. |
|
|
|
Easy upgrade process
Using our official Linux repositories or the official Docker image, upgrading GitLab is a breeze. |
|
|
|
Ability to edit all fields of a merge request
GitLab Merge Requests are editable by the author, the project’s owners and users with master access. Every field is editable, as well as the target branch. |
|
|
|
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. |
|
|
|
Configurable issue closing pattern
Define your own specific keywords to close one or more issues as soon as a merge request is merged. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
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. |
|
|
|
Various authentication mechanisms
GitLab can integrate with most of the authentication and authorization providers. |
|
|
|
Security Dashboards
Security Dashboard report the latest security status of the default branch for each project |
|
|
|
Static Application Security Testing
GitLab allows easily running Static Application Security Testing (SAST) in CI/CD pipelines; checking for vulnerable source code or well known security bugs in the libraries that are included by the application. Results are then shown in the Merge Request and in the Pipeline view. This feature is available as part of Auto DevOps to provide security-by-default. |
limited to public repos |
supports 18 languages |
|
Secret Detection
GitLab allows you to perform Secret Detection in CI/CD pipelines; checking for unintentionally committed secrets and credentials. Results are then shown in the Merge Request and in the Pipeline view. This feature is available as part of Auto DevOps to provide security-by-default. |
|
|
|
Dependency Scanning
GitLab automatically detects well known security bugs in the libraries that are included by the application, protecting your application from vulnerabilities that affect dependencies that are used dynamically. Results are then shown in the Merge Request and in the Pipeline view. This feature is available as part of Auto DevOps to provide security-by-default. |
|
|
|
Container Scanning
When building a Docker image for your application, GitLab can run a security scan to ensure it does not have any known vulnerability in the environment where your code is shipped. Results are then shown in the Merge Request and in the Pipeline view. This feature is available as part of Auto DevOps to provide security-by-default. |
|
|
|
Dynamic Application Security Testing
Once your application is online, GitLab allows running Dynamic Application Security Testing (DAST) in CI/CD pipelines; your application will be scanned to ensure threats like XSS or broken authentication flaws are not affecting it. Results are then shown in the Merge Request and in the Pipeline view. This feature is available as part of Auto DevOps to provide security-by-default. |
|
|
|
Interactive Application Security Testing
IAST combines elements of static and dynamic application security testing methods to improve the overall quality of the results. IAST typically uses an agent to instrument the application to monitor library calls and more. GitLab does not yet offer this feature. |
|
|
|
Graph Code coverage changes over time
Tracking how code coverage changes in a branch over time can be a time consuming and low value task for a team. GitLab now provides a simple graph to show how calculated code coverage values are trending over time. |
|
|
|
Create projects with Git push
Push new projects to the desired location and a new private project will automatically be created. |
|
|
|
Keep personal email private
Use a noreply email address for your commits instead of your personal email address private. |
|
|
|
Kubernetes Cluster Monitoring
Monitor key metrics of your connected Kubernetes cluster. |
|
|
|
ChatOps
Execute common actions directly from chat, with the output sent back to the channel. |
|
|
|
Deploy Tokens
Provide read-only access to specific repositories or container images to external infrastructures that need to access your data, for example to deploy applications on Kubernetes. This setting is available for project and group level. |
|
|
|
SAML SSO for Groups
Connect a group in GitLab to a SAML identity provider to manage authentication. |
|
|
|
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. |
|
|
|
Supports geolocation-aware DNS
Having Geo replicated server(s) can make local pulls go more quickly, but without support for Geolocation-aware DNS, developers need to reconfigure their tools manually to point to their nearest geo replicated server. Users using Geolocation-aware DNS can be transparently directed to the closest server available and can access repository data faster. |
|
|
|
Advanced global search installed as default search
Advanced global search via ElasticSearch is installed and enabled as part of the core installation and provides the default search capability |
|
|
|
Groups dropdown in navigation
Searching for a group is directly available behind a lightweight dropdown menu, removing the need to navigate away from your work into a separate view when you’re looking for a hard-to-remember group. |
|
|
|
GitLab Flavored Markdown with CommonMark
GitLab Flavored Markdown is now rendered using CommonMark, a modern standard, for new Markdown content. |
|
|
|
Initialize README on project creation
A repository can be initialized with an example README when creating a new project. If this option is checked, a project repository is initialized with a default master branch which can be cloned right away. |
|
|
|
Allow SAML assurance level to bypass 2FA
it is now possible to honor the SAML provider’s assurance level, allowing to disable the two-factor authentication on GitLab side via a new SAML configuration option |
|
|
|
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. |
|
|
|
See JUnit test summaries in merge request widget
GitLab allows you to view JUnit test results from the merge request widget, giving you insight into quality impacts of your changes. Learn more about JUnit test summaries in the merge request widget |
|
|
|
User status message
Define and show your personal status message via an Emoji and text message, exposed on your profile page and on any comment and author line. |
|
|
|
Private profile page
In certain situations, when privacy is of concern, users might not want to show their activity, contributions and personal projects. Activity-related information can be disabled in the profile settings. |
|
|
|
Download single repository files
When browsing through project repositories on GitLab, having direct access to single files is a relevant use case. A ‘Download’ button in the file viewer allows you to download individual files from the GitLab UI. |
|
|
|
Repository languages on project overview
A code languages bar on the project overview shows all relevant languages the GitLab repository consists of, including relative quantity. |
|
|
|
Terraform plan output summary in Merge Requests
A merge request widget shows the summary of expected infrastructure changes after a |
|
|
|
Interactive Web Terminals
Interactive web terminals allow you to connect to a running or completed Kubernetes, Docker, or Shell runner job and manually run commands to better understand what’s happening in the system. |
|
|
|
Instance file templates
Define custom |
|
|
|
Group file templates
Define custom |
|
|
|
Code Owners
Assign Code Owners to files to indicate the team members responsible for
code in your project using a |
|
|
|
Protected Environments
Specify which person, group, or account is allowed to deploy to a given environment, allowing further protection and safety of sensitive environments. |
|
|
|
Leverage virtual package repositories to simplify package management workflows.
A virtual repository is a collection of local, remote and other virtual repositories accessed through a single logical URL. GitLab Epic detailing the issues required to add this functionality. |
|
|
|
Proxy remote package registries for safer, more reliable builds.
For many organizations, it is useful to have a caching proxy for frequently used upstream packages. In the case of CI/CD, the proxy is responsible for receiving a request and returning the upstream package from a registry, acting as a pull-through cache to speed up your pipelines. |
|
|
|
Conan (C/C++) Repository
Conan is an open source, decentralized and multi-platform C/C++ Package Manager for developers to create and share native binaries. |
|
|
|
Maven (Java) Repository
GitLab’s Maven repository makes it easier to publish and share Java libraries across an organization, and ensure dependencies are managed correctly. It is fully integrated with GitLab, including authentication and authorization. |
|
|
|
NPM (node) Registry
GitLab’s NPM repository makes it easier to publish and share NPM packages across an organization, and ensure dependencies are managed correctly. It is fully integrated with GitLab, including authentication and authorization. |
|
|
|
NuGet (.NET) Repository
GitLab’s NuGet Repository allows C#/.NET developers to create, publish and share packages using the NuGet client or visual studio. |
|
|
|
PyPI (Python) Repository
Python developers can set up GitLab as a remote PyPI repository and build, publish, and share packages using the PyPI client or GitLab CI/CD. Check out the epic for additional details on implementation and timing |
|
|
|
RPM (Linux) Repository
This planned feature will enable Linux developers to build, publish and share RPM packages alongside their source code and pipelines. Check out the issue for additional details on implementation and timing |
|
|
|
Debian (Linux) Repository
This planned feature will enable Linux developers to build, publish and share Debian packages alongside their source code and pipelines. Check out the issue for additional details on implementation and timing |
|
|
|
RubyGems (Ruby) Repository
This planned feature will enable Ruby developers to setup GitLab as a remote RubyGems repository and to build, publish and share packages using the command line or GitLab CI/CD. This will also be a valuable feature for GitLab and help with dogfooding Check out the issue for additional details on implementation and timing |
|
|
|
Go Repository
This planned feature will enable Go developers to build, publish and share their packages right alongside their source code and pipelines. This will also be a valuable feature for GitLab and help with dogfooding Check out the issue for additional details on implementation and timing |
|
|
|
Composer (PHP) Repository
This planned feature will enable PHP developers to build, publish and share their packages right alongside their source code and pipelines. Check out the issue for additional details on implementation and timing |
|
|
|
Use the Package Registry through REST API
Enables support for automation and integration of the GitLab Package Registry through a REST API. |
|
|
|
Deduplicate Git objects for forked repositories
Reduce disk storage requirements for fork networks by pooling Git objects. |
|
|
|
GitLab-managed Terraform state files
You can configure GitLab once at the instance level to use a specific object storage for all Terraform state files. This way you can start a new infrastructure project with minimal boilerplate. |
|
|
|
Trigger pipeline on any event in code repository
Enables pipelines/workflows to be started based on when any defined event is executed in the code repository. For example, could run a workflow to send a welcome email on adding a new member to a repository or project. |
Supports 90 event triggers |
Supports 21 event triggers |
|
Trigger pipeline on any event in code repository app eco-system
Enables pipelines/workflows to be started based on when any defined event is executed in the code repository or in any app extension of that repository’s eco-system. For example, when an event happens in the Slack integration, update a repo work item. |
|
|
|
Community powered workflows (configuration is code so are shareable)
GitLab pipeline (workflows) are defined as yml in repos and can be shared just like actions. |
|
|
|
Any platform, any language, and cloud
Can run on any OS platform, for any language, and on any cloud provider |
|
|
|
No configuration, infrastructure setup, or patching necessary
As a SaaS offering, can provide software development and delivery services without the need to set up the tool itself, infrastructure to run it, and to maintain it by patching. |
|
|
|
Pipeline defined in one file kept in the repository
The pipeline/workflow can be fully defined by a single file which is kept in the code repository right next to the code it is meant to execute on. |
|
|
|
Store CI configuration outside the repository
Specify the path of the .gitlab-ci.yml as an arbitary URL to store CI configurations in a repository other than the one being built. This allows for processing hundreds of repos the same way by pointing all of them to the same external gitlab-ci.yml file, and gain efficiency by having only one CI configuration file to update for multiple repositories. Use cases where a service generates the configuration file dynamically would also benefit. The ability to host the .gitlab-ci.yml file in another project enables CI configurations access control in a scalable way as the owners of the project hosting the file could restrict write access to prevent changes by unauthorized users. |
|
|
|
Auto suggest pipelines to start with based on code language
Through language detection, auto suggest pipeline templates to run to help users quickly get a pipeline running. |
|
Auto Devops runs a pipeline, not just suggest one |
|
Comes with many pre-defined pipelines
Offers many pre-defined pipelines that capture best practice and make it easy for a user to get started with each project for common languages, platforms, and configurations. |
|
|
|
Connects the diff tools & services used during the SDLC
Can be used as a central glue to orchestrate, and connect data and outputs from your many different tools & services. |
|
|
|
Matrix builds
Built-in ability to define and execute builds that automatically trigger a number of parallel jobs or pipelines based on a multitude of input variables. For example, building for 3 OS’s at once, and for 3 different versions of libraries, would automatically be done in 9 parallel jobs. At GitLab, this is implemented using dynamic child pipelines. |
|
|
|
Run shared Linux runners
Ability to run runners on a pool of shared Linux systems from the SaaS offering. |
|
|
|
Run shared Windows runners
Ability to run runners on a pool of shared Windows systems from the SaaS offering. |
|
|
|
Run shared macOS runners
Ability to run runners on a pool of shared macOS systems from the SaaS offering. |
|
|
|
Pipeline status visible in pull/merge request
Status and results of pipeline runs are viewable at least in summary from the merge/pull request that they are part of. |
|
|
|
Live streaming of logs from running pipeline
Ability to see live job logs (while the pipeline is running). |
|
|
|
Search across all job logs
Search across all or more than one job log at once. Enables more efficient search for errors and other content of interest while troubleshooting or reviewing job output. |
|
browser search within the log at a time |
|
Download archive of all logs
Ability to download an archive of all job logs from a pipeline run in a single archive file. This is handy to enable analysis of the logs through another tool, or to send logs to someone who might not have access otherwise. |
|
can be individually downloaded |
|
View raw logs in plaintext
Ability to get the plain text of a log, no mark up, to be able to share it or use it externally. |
|
|
|
Multiple pipelines per repo
Ability to define multiple pipelines per code repository to enable either different processes to be run at different times, and/or to enable monorepos where there are multiple applications within one repo which need to be built and handled differently per application. |
|
|
|
Reference actions/jobs in another repo
Ability to have pipelines/workflows reference and use actions/jobs from a repo different from the one it is being run from, without needing any installation. |
|
|
|
Cross-project jobs with artifact dependencies
Specify a job in your current project depends on the latest artifact produced by a job in another pipeline to easily set up cross-project pipelines that have artifact dependencies on each other. |
|
|
|
Parent-child pipelines
When one pipeline serves as a parent of one of more child pipelines, it removes many of the challenges of complex pipeline creation. Performance can be improved because child pipelines can run concurrently based on trigger configurations in the parent pipeline. As an added bonus, decomposing a single, complex, pipeline into a parent pipeline with multiple children simplifies pipeline visualization and ultimately improves comprehension for the entire team. It is also possible to dynamically generate the |
|
|
|
S/MIME Signed Commits
Sign commits and prove that a commit was performed by a certain user. |
|
|
|
Static Site Editor
GitLab provides an easy way to collaborate on HTML content through the Static Site Editor. A collaborator doesn’t need to set up a local environment to contribute to the content nor have any prior knowledge of the underlying templating language, site architecture, or even Git. The Static Site Editor is currently delivered through a Middleman project template. |
|
|
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 devopstools@gitlab.com 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.