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

Azure DevOps



Azure DevOps vs GitLab

What is Azure DevOps? Azure DevOps offers functionality that covers multiple stages of the DevOps lifecycle including planning tools, source code management (SCM), and CI/CD.  Azure DevOps got there by rebranding some products to Azure DevOps and by integrating some of the tools that make up the DevOps Toolchain. For example, on September 10, 2018 Microsoft renamed VSTS to Azure DevOps and later renamed TFS to Azure DevOps Server, and upgraded both with the same new user interface.

GitLab has built a single application that covers the entire DevOps Tool Chain - planning, source code management, continuous integration, continuous delivery, security to monitoring. This enables close and seamless exchange of information and actions from one point in the DevOps lifecycle to another.

Feature Comparison

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

Ease of migration from other providers

GitLab lets you easily migrate all repos, issues and merge request data from your previous provider.

Learn how to migrate your projects to GitLab

Lock Discussion

Lock down continued discussion in an issue or merge request as a Maintainer role or higher, to prevent further abuse, spam, or unproductive collaboration.

Lock Discussion

Custom Notifications

Be notified by email, Slack, or to-do items anytime there are changes to an issue or merge request.

Learn more about Custom Notifications

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

Powerful branching

A branch in Git contains the entire history that precedes it. It’s also created or moved towards instantly and easily shared.

See the Git documentation to get started with branches

Protected branches

Granular permissions for branches you want to protect.

Read about protected branches

Commit graph and reporting tools

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

Learn more about commit graphs

Required Merge Request Approvals

Guarantee quality and standards of your code by mandating a set number of necessary approvals and predefine a list of specific approvers.

Learn more about merge request approvals

Multiple approvers in code review

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.

Approvals Documentation

Approval rules for code review

Approval rules ensure that the right people review merge requests by specifying eligible approvers and the minimum number of approvals required for a merge request.

Approvals 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

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

Squash and merge

Combine commits into one so that main branch has a simpler to follow and revert history.

Learn more about squash and merge

Reject unsigned commits

GitLab 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.

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

GPG Signed Commits

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

Read more about GPG signed commits

X.509 Signed Commits and Tags

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

Read more about X.509 signed commits and tags

Restrict push and merge access

Extend the base functionality of protected branches and choose which users can push or merge to a protected branch.

Read about protected branches

Protected tags

Granular permissions for tags you want to protect.

Read about protected tags

S/MIME Signed Commits

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

Read more about S/MIME signed commits

Optional Merge Request Approvals

Code review is an essential practice of every successful project, and giving your approval once a merge request is in good shape is an important part of the review process, as it clearly communicates the ability to merge the change.

Learn more about optional merge request approvals

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.

Image Discussions

Merge Request Commit Discussions

Comment on a commit within the context of a merge request itself

Merge Request Commit Discussions

Create merge request from email

Create a merge request from email by sending in the merge request title, description, and source branch name. Alternatively use patch files to create a merge request without first pushing a branch.

Create merge request from email

First time contributor badge

Highlight first-time contributors in a project.

Cleaner diffs for Jupyter Notebook files

GitLab automatically strips out the noise and displays a cleaner version of the diff for these files. Human-readable diffs make it easier to review the substance of the change, without worrying about the formatting pieces that Jupyter Notebooks need.

Cleaner diffs

Clone project inside Visual Studio Code

Use the Git: Clone command in VS Code to search for projects in GitLab and clone them locally, so you can quickly begin contributing in VS Code.

Read about cloning projects in VS Code

Open project in Visual Studio Code

Use the clone dropdown for a project and choose to open the project in Visual Studio Code.

Clone and open in VS Code

Insert Snippets directly in Visual Studio Code

Insert snippets stored in GitLab directly into your working file in VS Code.

Insert snippets in VS Code

View issues and merge requests in Visual Studio Code

View issues and merge requests directly in VS Code for easy access and collaboration. This gives quick access to the information needed, and the ability to respond directly to issues and merge requests via comments.

View issues and merge requests in VS Code

View merge request changes in VS Code

View the changes for merge requests directly in VS Code with familiar layout and diff interfaces.

Merge request changes in VS Code

Autocomplete GitLab CI Variables in VS Code

VS Code provides auto-completion for predefined environment variables when editing your .gitlab-ci.yml file. Tooltips in the auto-complete dialog provide information on what the variable can be used for, and information on supported GitLab and Runner versions.

CI Variable completion in VS Code

View code review comments in VS Code

See merge request comments on diffs directly in VS Code when reviewing a merge request.

Merge request reviews in VS Code

Merge request reviews in VS Code

The sidebar in VS Code contains a list of all the changed files in the merge request. Selecting files opens a diff comparison for you to review the changes in VS Code. While viewing the diff, you can read feedback left on the files, and create new comments by selecting a line number and creating your comment. All comments and feedback you provide in VS Code are available in the GitLab web interface, making it easy for you to perform your reviews in VS Code, and other users to participate in GitLab.

Merge request reviews in VS Code

Comments indicator for merge request reviews in VS Code

When reviewing a merge request, files with a comment have an additional indicator to easily identify feedback.

Merge request reviews in VS Code

Check out branches of merge requests in Visual Studio Code

When reviewing a merge request you can right click to check out the branch locally for easier review and testing.

Merge request reviews in VS Code

Create and apply patches in VS Code

Create and apply patches directly in Visual Studio Code. The new GitLab: Create snippet patch command creates a patch with the changes in your editor and uploads that patch as a GitLab snippet. Anyone can search for patches in the project’s snippets and apply them directly in VS Code with the GitLab: Apply snippet patch command. The applied changes can then be committed to the MR.

Create and apply patch in VS Code

Remote Repositories for GitLab in VS Code

Remote repositories allow you to browse a read-only version of a project in your familiar VS Code environment. You can then quickly find the information you’re looking for, compare an implementation, or copy a snippet you need.

Remote Repositories for GitLab

Deduplicate Git objects for forked repositories

Reduce disk storage requirements of forked Git repositories by pooling Git objects.

Read about Git object pools

Variable replication factor

Allow configuration of a per-repository replication factor for repositories stored in the Gitaly Cluster.


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

EditorConfig in the Web IDE

The Web IDE supports the use of .editorconfig files in projects for standardizing coding style of all users working on the project. This helps to easily keep consistency and quality throughout the project.

Learn more about configuring the Web IDE

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.

Learn more about Markdown editing in the Web IDE

Real-time feedback for .gitlab-ci.yml in Web IDE

To make it easier to configure your GitLab CI pipeline, the Web IDE now provides real-time linting and completion when editing .gitlab-ci.yml files.

Learn more about .gitlab-ci.yml editing feedback in the Web IDE

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.


GitLab-Figma Plugin

Our Figma plugin allows you to upload Figma frames and components to GitLab issues.


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

Limit project size at a global, group, and project level

Ensure that disk space usage is under control.

Learn more about project size limiting

Merge Requests

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

Learn more about merge requests

Merge conflict resolution

Preview merge conflicts in the GitLab UI and tell Git which version to use.

Learn more about the merge conflict resolution UI

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 with a single click. No configuration required.

Learn more about Merge when 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.

Merge request versions

View and compare merge request diffs from the merge request UI.

Learn more about merge request versions

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

Activity Stream

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

Learn more about the Activity Stream

Draft merge requests

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

Learn more about Draft MRs

Built-in and custom project templates

When creating a new project, you can choose to kickstart your project from a predefined template that already has some working example code and CI preconfigured. In addition, you can define a custom project templates by assigning a group. Child projects of this group are available as templates when creating a new project.

Read more about Project templates

Vulnerability Management

Empower your entire team, and not just Security, to act on security findings with a unified interface for scan results from all GitLab Security scanners.

Learn more about Vulnerability Management

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

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.