On May 6, GitHub made several feature announcements at their GitHub Satellite Event. Here's GitLab's blog post about their event.
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.
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.
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.
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.
|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|
|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|
|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|