# Merge Request Approvals
> 原文:[https://docs.gitlab.com/ee/user/project/merge_requests/merge_request_approvals.html](https://docs.gitlab.com/ee/user/project/merge_requests/merge_request_approvals.html)
* [Optional Approvals](#optional-approvals-core-only)
* [Required Approvals](#required-approvals-starter)
* [Approval Rules](#approval-rules)
* [Eligible Approvers](#eligible-approvers)
* [Implicit Approvers](#implicit-approvers)
* [Code Owners as eligible approvers](#code-owners-as-eligible-approvers)
* [Adding / editing a default approval rule](#adding--editing-a-default-approval-rule)
* [Editing / overriding approval rules per merge request](#editing--overriding-approval-rules-per-merge-request)
* [Multiple approval rules](#multiple-approval-rules-premium)
* [Scoped to Protected Branch](#scoped-to-protected-branch-premium)
* [Adding or removing an approval](#adding-or-removing-an-approval)
* [Merge request approvals project settings](#merge-request-approvals-project-settings)
* [Prevent overriding default approvals](#prevent-overriding-default-approvals)
* [Resetting approvals on push](#resetting-approvals-on-push)
* [Allowing merge request authors to approve their own merge requests](#allowing-merge-request-authors-to-approve-their-own-merge-requests)
* [Prevent approval of merge requests by their committers](#prevent-approval-of-merge-requests-by-their-committers)
* [Require authentication when approving a merge request](#require-authentication-when-approving-a-merge-request)
* [Security approvals in merge requests](#security-approvals-in-merge-requests-ultimate)
* [Enabling the new approvals interface](#enabling-the-new-approvals-interface)
# Merge Request Approvals[](#merge-request-approvals "Permalink")
代码审查是每个成功项目的基本实践,一旦合并请求状态良好,就需要您的批准,这是审查过程的重要组成部分,因为它清楚地传达了合并变更的能力.
## Optional Approvals[](#optional-approvals-core-only "Permalink")
在[GitLab Core 13.2 中](https://gitlab.com/gitlab-org/gitlab/-/issues/27426)引入.
具有开发者[权限](../../permissions.html)或更高[权限的](../../permissions.html)任何用户都可以在 GitLab Core 中批准合并请求. 这为审阅者提供了一种一致的机制来提供批准,并使维护者更容易知道何时可以合并更改. Core 中的批准是可选的,并且在没有批准的情况下不会阻止合并请求的合并.
## Required Approvals[](#required-approvals-starter "Permalink")
在[GitLab 企业版 7.12 中](https://about.gitlab.com/releases/2015/06/22/gitlab-7-12-released/#merge-request-approvers-ee-only)引入.
必需的批准通过要求指定的人在可以合并的合并请求之前批准,可以强制执行代码审查.
所需的批准可启用多个用例:
* 强制审查所有合并到存储库中的代码.
* 通过[批准规则](#approval-rules)指定给定提议的代码更改的审核者,以及最少数量的审核者.
* 为所有建议的代码更改指定审阅者的类别,例如后端,前端,质量保证,数据库等.
* 由合并请求中更改的文件确定,自动将[代码所有者](#code-owners-as-eligible-approvers)指定[为合格的批准者](#code-owners-as-eligible-approvers) .
* 在合并可能引入漏洞的代码之前, [需要获得安全团队的批准](#security-approvals-in-merge-requests-ultimate) .
### Approval Rules[](#approval-rules "Permalink")
批准规则定义了合并请求在可以合并之前必须获得多少个批准,以及可选地应该由哪些用户进行批准. 可以定义批准:
* [As project defaults](#adding--editing-a-default-approval-rule).
* [Per merge request](#editing--overriding-approval-rules-per-merge-request).
如果未定义批准规则,则任何用户都可以批准合并请求,尽管仍可以在[项目设置中为合并请求批准设置](#merge-request-approvals-project-settings)所需批准者的默认最小数量.
批准规则定义了合并请求在可以合并之前必须获得多少个批准,以及可选地应该由哪些用户进行批准. 可以定义批准:
* [As project defaults](#adding--editing-a-default-approval-rule).
* [Per merge request](#editing--overriding-approval-rules-per-merge-request).
如果未定义批准规则,则任何用户都可以批准合并请求,尽管仍可以在[项目设置中为合并请求批准设置](#merge-request-approvals-project-settings)所需批准者的默认最小数量.
#### Eligible Approvers[](#eligible-approvers "Permalink")
以下用户可以批准合并请求:
* 在项目中被添加为批准者的用户,或将请求级别与开发者或更高[权限](../../permissions.html)合并的[用户](../../permissions.html) .
* 由合并请求更改的具有开发人员或更高[权限](../../permissions.html)的文件的[代码所有者](#code-owners-as-eligible-approvers) .
如果单个用户是以下成员的成员,则可以将其添加为项目的批准者:
* 该项目.
* 该项目的直接上级组.
* 可以通过[共享](../members/share_project_with_groups.html)访问项目的组.
也可以将一组用户添加为批准者. 将来,小组批准者可能只[限于对项目具有共享访问权限的小组](https://gitlab.com/gitlab-org/gitlab/-/issues/2048) .
如果将用户添加为个人批准者,并且也是组批准者的一部分,则该用户仅被计数一次. 如果在项目设置上启用了" [**阻止作者批准"**](#allowing-merge-request-authors-to-approve-their-own-merge-requests) (默认情况下启用)和" [**阻止提交者批准"**](#prevent-approval-of-merge-requests-by-their-committers) (默认情况下禁用),则合并请求作者以及已提交合并请求的用户均不算作合格批准者.
##### Implicit Approvers[](#implicit-approvers "Permalink")
如果所需批准的数量大于分配的批准者的数量,则来自其他用户的批准将计入满足要求. 这些将是在项目中具有开发人员[权限](../../permissions.html)或更高[权限的](../../permissions.html)用户,但未在批准规则中明确列出.
##### Code Owners as eligible approvers[](#code-owners-as-eligible-approvers "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/7933) in [GitLab Starter](https://about.gitlab.com/pricing/) 11.5.
如果将[代码所有者](../code_owners.html)添加到存储库中,则相应文件的所有者将与具有 Developer 或更高[权限的](../../permissions.html)成员一起成为合格的批准者.
要启用此合并请求批准规则:
1. 导航到项目的**"设置">"常规",**然后展开" **合并请求批准"** .
2. 找到**任何合格的用户,**然后选择所需的批准数量.
[![MR approvals by Code Owners](https://img.kancloud.cn/03/36/0336f0b1b4240318ffa86f56cc9eb6de_1968x564.png)](img/mr_approvals_by_code_owners_v12_7.png)
设置后,合并请求只能在您设置的批准数量批准后才能合并. manbetx 客户端打不开将毫无区别地接受来自具有开发者或更高权限的用户以及代码所有者的批准.
或者,您可以**要求** [保护所有者的代码所有者批准](../protected_branches.html#protected-branches-approval-by-code-owners-premium) .
#### Adding / editing a default approval rule[](#adding--editing-a-default-approval-rule "Permalink")
要添加或编辑默认的合并请求批准规则:
1. 导航到您项目的 **设置>常规,**然后展开**合并请求批准** .
2. 单击**添加批准规则** ,或单击**编辑** .
* 添加或更改**规则名称** .
* 设置**所需的批准号**所需的批准数量. 最小值是`0` .
* (可选)搜索有[资格批准](#eligible-approvers)合并请求的用户或组,然后单击" **添加"**按钮将其添加为批准者. 在搜索字段中键入之前,将根据合并请求更改的文件的先前作者来建议批准者.
* (可选)点击 组或用户旁边的" **删除"**按钮可将其从规则中删除.
3. Click **添加批准规则** or **更新批准规则**.
在更改规则之前创建的任何合并请求都不会更改. 他们将保留原始批准规则,除非手动[覆盖](#editing--overriding-approval-rules-per-merge-request) .
**注意:**如果合并请求的目标是其他项目,例如从分支到上游项目,则默认批准规则将从目标(上游)项目而不是源(叉子)获取.
##### Editing / overriding approval rules per merge request[](#editing--overriding-approval-rules-per-merge-request "Permalink")
在 GitLab 企业版 9.4 中引入.
默认情况下,MR 作者或具有足够[权限](../../permissions.html)的用户可以编辑每个合并请求(MR)中列出的合并请求批准规则. 可以在[合并请求批准设置中](#prevent-overriding-default-approvals)禁用此功能.
一种可能的情况是添加比默认设置中定义更多的批准者.
创建或编辑合并请求时,请找到" **批准规则"**部分,然后按照与[添加/编辑默认批准规则](#adding--editing-a-default-approval-rule)相同的步骤进行操作.
#### Multiple approval rules[](#multiple-approval-rules-premium "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/1979) in [GitLab Premium](https://about.gitlab.com/pricing/) 11.10.
在 GitLab Premium 中,每个合并请求可以有多个批准规则,每个项目可以有多个默认批准规则.
添加或编辑多个默认规则与[添加或编辑单个默认批准规则相同](#adding--editing-a-default-approval-rule) ,不同之处在于,即使已经定义了规则," **添加批准规则"**按钮仍可用于添加更多规则.
同样,每个合并请求中编辑或覆盖多个批准规则与每个合并请求中[编辑或覆盖批准规则](#editing--overriding-approval-rules-per-merge-request)相同,只是即使已定义一个规则," **添加批准规则"**按钮仍可用于添加更多规则.
当[合格的批准人](#eligible-approvers)批准合并请求时,它将减少批准人所属的所有规则的剩余批准数.
[![Approvals premium merge request widget](https://img.kancloud.cn/40/94/4094583469a72fcd294bed53aeeee701_1926x910.png)](img/approvals_premium_mr_widget_v12_7.png)
#### Scoped to Protected Branch[](#scoped-to-protected-branch-premium "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/460) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.8.
批准规则通常仅与特定分支(例如`master` . 在配置[**默认批准规则时,**](#adding--editing-a-default-approval-rule)可以通过导航到项目的**"设置"** ,展开" **合并请求批准"** ,然后从" **目标"分支**下拉列表中选择" **任何"分支** ,将这些作用域一下子作用于所有受保护的分支.
或者,您可以从" **目标"分支**下拉列表中选择一个非常特定的受保护分支:
[![Scoped to Protected Branch](https://img.kancloud.cn/6c/c0/6cc0b47ab49132c64d6f946329b94f07_800x929.png)](img/scoped_to_protected_branch_v12_8.png)
要启用此配置,请参阅[代码所有者对受保护分支的批准](../protected_branches.html#protected-branches-approval-by-code-owners-premium) .
### Adding or removing an approval[](#adding-or-removing-an-approval "Permalink")
当[合格的批准者](#eligible-approvers)访问一个开放合并请求时,可能是以下之一:
* 如果所需的批准数目*尚未*满足,他们可以通过点击批准它显示的**批准**按钮.
[![Approve](https://img.kancloud.cn/11/43/1143f7593a6d9ad2bbe12ae0cd18bb5f_558x122.png)](img/approve.png)
* 如果已经满足所需的批准数量,则他们仍然可以通过单击显示的**"额外批准"**按钮来**批准** .
[![Add approval](https://img.kancloud.cn/e0/91/e091401969bded6b14696dbc5dc745e9_571x122.png)](img/approve_additionally.png)
* **他们已经批准了此合并请求** :他们可以删除他们的批准.
[![Remove approval](https://img.kancloud.cn/7d/79/7d7932b600650b5fb6e8f585bd1f3598_551x118.png)](img/remove_approval.png)
**注意:**如果在项目设置中启用了" [**阻止作者批准",**](#allowing-merge-request-authors-to-approve-their-own-merge-requests)则不允许合并请求作者批准自己的合并请求.
满足批准规则后,如果没有其他阻止请求,则可以合并合并请求. 请注意,合并请求仍可能被其他条件阻止,例如合并冲突, [挂起的讨论](../../discussions/index.html#only-allow-merge-requests-to-be-merged-if-all-threads-are-resolved)或[失败的 CI / CD 管道](merge_when_pipeline_succeeds.html) .
### Merge request approvals project settings[](#merge-request-approvals-project-settings "Permalink")
可以通过以下步骤找到合并请求批准的项目设置: **设置>常规**和扩展**合并请求批准** .
#### Prevent overriding default approvals[](#prevent-overriding-default-approvals "Permalink")
默认情况下,用户可以在合并请求中编辑批准规则. 如果禁用,则所有新合并请求的[批准规则](#adding--editing-a-default-approval-rule)将由[默认批准规则](#adding--editing-a-default-approval-rule)确定. 要禁用此功能:
1. 取消选中**可以覆盖每个合并请求所需的批准人和批准**复选框.
2. Click **保存更改**.
#### Resetting approvals on push[](#resetting-approvals-on-push "Permalink")
当新的提交被推送到合并请求的源分支时,您可以强制删除对合并请求的所有批准. 如果禁用,则即使合并请求中添加了更改,批准也将持续. 要启用此功能:
1. Check the **将新提交推送到其源分支时,删除合并请求中的所有批准** checkbox.
2. Click **保存更改**.
**注意:**重新定义来自 UI [的合并请求](fast_forward_merge.html)时,批准不会重置. 但是,如果更改了目标分支,则批准将被重置.
#### Allowing merge request authors to approve their own merge requests[](#allowing-merge-request-authors-to-approve-their-own-merge-requests "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/3349) in [GitLab Starter](https://about.gitlab.com/pricing/) 11.3.
您可以允许合并请求作者自行批准合并请求. 作者也必须包含在批准者列表中,以便能够批准其合并请求. 要启用此功能:
1. 取消选中" **阻止合并请求作者批准合并请求"**复选框,默认情况下启用此复选框.
2. Click **保存更改**.
#### Prevent approval of merge requests by their committers[](#prevent-approval-of-merge-requests-by-their-committers "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/10441) in [GitLab Starter](https://about.gitlab.com/pricing/) 11.10.
您可以阻止已提交合并请求的用户批准它. 要启用此功能:
1. 选中**阻止提交者批准合并请求**复选框.
2. Click **保存更改**.
#### Require authentication when approving a merge request[](#require-authentication-when-approving-a-merge-request "Permalink")
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/5981) in [GitLab Starter](https://about.gitlab.com/pricing/) 12.0.
**注意:**要在批准合并请求时要求身份验证,必须在[登录限制](../../admin_area/settings/sign_in_restrictions.html#password-authentication-enabled)下**启用为 Web 界面**启用的**密码身份验证** . 在管理区域中.
您可以强制批准者输入密码以进行身份验证,然后再添加批准. 这使电子签名能够获得批准,例如[CFR Part 11](https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfcfr/CFRSearch.cfm?CFRPart=11&showFR=1&subpartNode=21:1.0.1.1.8.3)所定义的签名. 要启用此功能:
1. 选中**需要用户密码批准**复选框.
2. Click **保存更改**.
### Security approvals in merge requests[](#security-approvals-in-merge-requests-ultimate "Permalink")
可以将合并请求批准配置为在合并请求引入漏洞时需要安全团队成员的批准.
有关更多信息,请参见[合并请求中的安全性批准](../../application_security/index.html#security-approvals-in-merge-requests) .
### Enabling the new approvals interface[](#enabling-the-new-approvals-interface "Permalink")
从[GitLab v12.0 开始](https://gitlab.com/gitlab-org/gitlab/-/issues/10685) ,默认情况下会提供更新的批准界面. 在 12.0 之前的版本中,除非启用了`approval_rules`功能标志,否则更新的界面不可用,这可由实例管理员从 Rails 控制台中完成.
使用以下命令来启动 Rails 控制台:
```
# Omnibus GitLab
gitlab-rails console
# Installation from source
cd /home/git/gitlab
sudo -u git -H bin/rails console -e production
```
然后运行`Feature.enable(:approval_rules)`以启用更新的界面.
- GitLab Docs
- Installation
- Requirements
- GitLab cloud native Helm Chart
- Install GitLab with Docker
- Installation from source
- Install GitLab on Microsoft Azure
- Installing GitLab on Google Cloud Platform
- Installing GitLab on Amazon Web Services (AWS)
- Analytics
- Code Review Analytics
- Productivity Analytics
- Value Stream Analytics
- Kubernetes clusters
- Adding and removing Kubernetes clusters
- Adding EKS clusters
- Adding GKE clusters
- Group-level Kubernetes clusters
- Instance-level Kubernetes clusters
- Canary Deployments
- Cluster Environments
- Deploy Boards
- GitLab Managed Apps
- Crossplane configuration
- Cluster management project (alpha)
- Kubernetes Logs
- Runbooks
- Serverless
- Deploying AWS Lambda function using GitLab CI/CD
- Securing your deployed applications
- Groups
- Contribution Analytics
- Custom group-level project templates
- Epics
- Manage epics
- Group Import/Export
- Insights
- Issues Analytics
- Iterations
- Public access
- SAML SSO for GitLab.com groups
- SCIM provisioning using SAML SSO for GitLab.com groups
- Subgroups
- Roadmap
- Projects
- GitLab Secure
- Security Configuration
- Container Scanning
- Dependency Scanning
- Dependency List
- Static Application Security Testing (SAST)
- Secret Detection
- Dynamic Application Security Testing (DAST)
- GitLab Security Dashboard
- Offline environments
- Standalone Vulnerability pages
- Security scanner integration
- Badges
- Bulk editing issues and merge requests at the project level
- Code Owners
- Compliance
- License Compliance
- Compliance Dashboard
- Create a project
- Description templates
- Deploy Keys
- Deploy Tokens
- File finder
- Project integrations
- Integrations
- Atlassian Bamboo CI Service
- Bugzilla Service
- Custom Issue Tracker service
- Discord Notifications service
- Enabling emails on push
- GitHub project integration
- Hangouts Chat service
- Atlassian HipChat
- Irker IRC Gateway
- GitLab Jira integration
- Mattermost Notifications Service
- Mattermost slash commands
- Microsoft Teams service
- Mock CI Service
- Prometheus integration
- Redmine Service
- Slack Notifications Service
- Slack slash commands
- GitLab Slack application
- Webhooks
- YouTrack Service
- Insights
- Issues
- Crosslinking Issues
- Design Management
- Confidential issues
- Due dates
- Issue Boards
- Issue Data and Actions
- Labels
- Managing issues
- Milestones
- Multiple Assignees for Issues
- Related issues
- Service Desk
- Sorting and ordering issue lists
- Issue weight
- Associate a Zoom meeting with an issue
- Merge requests
- Allow collaboration on merge requests across forks
- Merge Request Approvals
- Browser Performance Testing
- How to create a merge request
- Cherry-pick changes
- Code Quality
- Load Performance Testing
- Merge Request dependencies
- Fast-forward merge requests
- Merge when pipeline succeeds
- Merge request conflict resolution
- Reverting changes
- Reviewing and managing merge requests
- Squash and merge
- Merge requests versions
- Draft merge requests
- Members of a project
- Migrating projects to a GitLab instance
- Import your project from Bitbucket Cloud to GitLab
- Import your project from Bitbucket Server to GitLab
- Migrating from ClearCase
- Migrating from CVS
- Import your project from FogBugz to GitLab
- Gemnasium
- Import your project from GitHub to GitLab
- Project importing from GitLab.com to your private GitLab instance
- Import your project from Gitea to GitLab
- Import your Jira project issues to GitLab
- Migrating from Perforce Helix
- Import Phabricator tasks into a GitLab project
- Import multiple repositories by uploading a manifest file
- Import project from repo by URL
- Migrating from SVN to GitLab
- Migrating from TFVC to Git
- Push Options
- Releases
- Repository
- Branches
- Git Attributes
- File Locking
- Git file blame
- Git file history
- Repository mirroring
- Protected branches
- Protected tags
- Push Rules
- Reduce repository size
- Signing commits with GPG
- Syntax Highlighting
- GitLab Web Editor
- Web IDE
- Requirements Management
- Project settings
- Project import/export
- Project access tokens (Alpha)
- Share Projects with other Groups
- Snippets
- Static Site Editor
- Wiki
- Project operations
- Monitor metrics for your CI/CD environment
- Set up alerts for Prometheus metrics
- Embedding metric charts within GitLab-flavored Markdown
- Embedding Grafana charts
- Using the Metrics Dashboard
- Dashboard YAML properties
- Metrics dashboard settings
- Panel types for dashboards
- Using Variables
- Templating variables for metrics dashboards
- Prometheus Metrics library
- Monitoring AWS Resources
- Monitoring HAProxy
- Monitoring Kubernetes
- Monitoring NGINX
- Monitoring NGINX Ingress Controller
- Monitoring NGINX Ingress Controller with VTS metrics
- Alert Management
- Error Tracking
- Tracing
- Incident Management
- GitLab Status Page
- Feature Flags
- GitLab CI/CD
- GitLab CI/CD pipeline configuration reference
- GitLab CI/CD include examples
- Introduction to CI/CD with GitLab
- Getting started with GitLab CI/CD
- How to enable or disable GitLab CI/CD
- Using SSH keys with GitLab CI/CD
- Migrating from CircleCI
- Migrating from Jenkins
- Auto DevOps
- Getting started with Auto DevOps
- Requirements for Auto DevOps
- Customizing Auto DevOps
- Stages of Auto DevOps
- Upgrading PostgreSQL for Auto DevOps
- Cache dependencies in GitLab CI/CD
- GitLab ChatOps
- Cloud deployment
- Docker integration
- Building Docker images with GitLab CI/CD
- Using Docker images
- Building images with kaniko and GitLab CI/CD
- GitLab CI/CD environment variables
- Predefined environment variables reference
- Where variables can be used
- Deprecated GitLab CI/CD variables
- Environments and deployments
- Protected Environments
- GitLab CI/CD Examples
- Test a Clojure application with GitLab CI/CD
- Using Dpl as deployment tool
- Testing a Phoenix application with GitLab CI/CD
- End-to-end testing with GitLab CI/CD and WebdriverIO
- DevOps and Game Dev with GitLab CI/CD
- Deploy a Spring Boot application to Cloud Foundry with GitLab CI/CD
- How to deploy Maven projects to Artifactory with GitLab CI/CD
- Testing PHP projects
- Running Composer and NPM scripts with deployment via SCP in GitLab CI/CD
- Test and deploy Laravel applications with GitLab CI/CD and Envoy
- Test and deploy a Python application with GitLab CI/CD
- Test and deploy a Ruby application with GitLab CI/CD
- Test and deploy a Scala application to Heroku
- GitLab CI/CD for external repositories
- Using GitLab CI/CD with a Bitbucket Cloud repository
- Using GitLab CI/CD with a GitHub repository
- GitLab Pages
- GitLab Pages
- GitLab Pages domain names, URLs, and baseurls
- Create a GitLab Pages website from scratch
- Custom domains and SSL/TLS Certificates
- GitLab Pages integration with Let's Encrypt
- GitLab Pages Access Control
- Exploring GitLab Pages
- Incremental Rollouts with GitLab CI/CD
- Interactive Web Terminals
- Optimizing GitLab for large repositories
- Metrics Reports
- CI/CD pipelines
- Pipeline Architecture
- Directed Acyclic Graph
- Multi-project pipelines
- Parent-child pipelines
- Pipelines for Merge Requests
- Pipelines for Merged Results
- Merge Trains
- Job artifacts
- Pipeline schedules
- Pipeline settings
- Triggering pipelines through the API
- Review Apps
- Configuring GitLab Runners
- GitLab CI services examples
- Using MySQL
- Using PostgreSQL
- Using Redis
- Troubleshooting CI/CD
- GitLab Package Registry
- GitLab Container Registry
- Dependency Proxy
- GitLab Composer Repository
- GitLab Conan Repository
- GitLab Maven Repository
- GitLab NPM Registry
- GitLab NuGet Repository
- GitLab PyPi Repository
- API Docs
- API resources
- .gitignore API
- GitLab CI YMLs API
- Group and project access requests API
- Appearance API
- Applications API
- Audit Events API
- Avatar API
- Award Emoji API
- Project badges API
- Group badges API
- Branches API
- Broadcast Messages API
- Project clusters API
- Group clusters API
- Instance clusters API
- Commits API
- Container Registry API
- Custom Attributes API
- Dashboard annotations API
- Dependencies API
- Deploy Keys API
- Deployments API
- Discussions API
- Dockerfiles API
- Environments API
- Epics API
- Events
- Feature Flags API
- Feature flag user lists API
- Freeze Periods API
- Geo Nodes API
- Group Activity Analytics API
- Groups API
- Import API
- Issue Boards API
- Group Issue Boards API
- Issues API
- Epic Issues API
- Issues Statistics API
- Jobs API
- Keys API
- Labels API
- Group Labels API
- License
- Licenses API
- Issue links API
- Epic Links API
- Managed Licenses API
- Markdown API
- Group and project members API
- Merge request approvals API
- Merge requests API
- Project milestones API
- Group milestones API
- Namespaces API
- Notes API
- Notification settings API
- Packages API
- Pages domains API
- Pipeline schedules API
- Pipeline triggers API
- Pipelines API
- Project Aliases API
- Project import/export API
- Project repository storage moves API
- Project statistics API
- Project templates API
- Projects API
- Protected branches API
- Protected tags API
- Releases API
- Release links API
- Repositories API
- Repository files API
- Repository submodules API
- Resource label events API
- Resource milestone events API
- Resource weight events API
- Runners API
- SCIM API
- Search API
- Services API
- Application settings API
- Sidekiq Metrics API
- Snippets API
- Project snippets
- Application statistics API
- Suggest Changes API
- System hooks API
- Tags API
- Todos API
- Users API
- Project-level Variables API
- Group-level Variables API
- Version API
- Vulnerabilities API
- Vulnerability Findings API
- Wikis API
- GraphQL API
- Getting started with GitLab GraphQL API
- GraphQL API Resources
- API V3 to API V4
- Validate the .gitlab-ci.yml (API)
- User Docs
- Abuse reports
- User account
- Active sessions
- Deleting a User account
- Permissions
- Personal access tokens
- Profile preferences
- Threads
- GitLab and SSH keys
- GitLab integrations
- Git
- GitLab.com settings
- Infrastructure as code with Terraform and GitLab
- GitLab keyboard shortcuts
- GitLab Markdown
- AsciiDoc
- GitLab Notification Emails
- GitLab Quick Actions
- Autocomplete characters
- Reserved project and group names
- Search through GitLab
- Advanced Global Search
- Advanced Syntax Search
- Time Tracking
- GitLab To-Do List
- Administrator Docs
- Reference architectures
- Reference architecture: up to 1,000 users
- Reference architecture: up to 2,000 users
- Reference architecture: up to 3,000 users
- Reference architecture: up to 5,000 users
- Reference architecture: up to 10,000 users
- Reference architecture: up to 25,000 users
- Reference architecture: up to 50,000 users
- Troubleshooting a reference architecture set up
- Working with the bundled Consul service
- Configuring PostgreSQL for scaling
- Configuring GitLab application (Rails)
- Load Balancer for multi-node GitLab
- Configuring a Monitoring node for Scaling and High Availability
- NFS
- Working with the bundled PgBouncer service
- Configuring Redis for scaling
- Configuring Sidekiq
- Admin Area settings
- Continuous Integration and Deployment Admin settings
- Custom instance-level project templates
- Diff limits administration
- Enable and disable GitLab features deployed behind feature flags
- Geo nodes Admin Area
- GitLab Pages administration
- Health Check
- Job logs
- Labels administration
- Log system
- PlantUML & GitLab
- Repository checks
- Repository storage paths
- Repository storage types
- Account and limit settings
- Service templates
- System hooks
- Changing your time zone
- Uploads administration
- Abuse reports
- Activating and deactivating users
- Audit Events
- Blocking and unblocking users
- Broadcast Messages
- Elasticsearch integration
- Gitaly
- Gitaly Cluster
- Gitaly reference
- Monitoring GitLab
- Monitoring GitLab with Prometheus
- Performance Bar
- Usage statistics
- Object Storage
- Performing Operations in GitLab
- Cleaning up stale Redis sessions
- Fast lookup of authorized SSH keys in the database
- Filesystem Performance Benchmarking
- Moving repositories managed by GitLab
- Run multiple Sidekiq processes
- Sidekiq MemoryKiller
- Switching to Puma
- Understanding Unicorn and unicorn-worker-killer
- User lookup via OpenSSH's AuthorizedPrincipalsCommand
- GitLab Package Registry administration
- GitLab Container Registry administration
- Replication (Geo)
- Geo database replication
- Geo with external PostgreSQL instances
- Geo configuration
- Using a Geo Server
- Updating the Geo nodes
- Geo with Object storage
- Docker Registry for a secondary node
- Geo for multiple nodes
- Geo security review (Q&A)
- Location-aware Git remote URL with AWS Route53
- Tuning Geo
- Removing secondary Geo nodes
- Geo data types support
- Geo Frequently Asked Questions
- Geo Troubleshooting
- Geo validation tests
- Disaster Recovery (Geo)
- Disaster recovery for planned failover
- Bring a demoted primary node back online
- Automatic background verification
- Rake tasks
- Back up and restore GitLab
- Clean up
- Namespaces
- Maintenance Rake tasks
- Geo Rake Tasks
- GitHub import
- Import bare repositories
- Integrity check Rake task
- LDAP Rake tasks
- Listing repository directories
- Praefect Rake tasks
- Project import/export administration
- Repository storage Rake tasks
- Generate sample Prometheus data
- Uploads migrate Rake tasks
- Uploads sanitize Rake tasks
- User management
- Webhooks administration
- X.509 signatures
- Server hooks
- Static objects external storage
- Updating GitLab
- GitLab release and maintenance policy
- Security
- Password Storage
- Custom password length limits
- Restrict allowed SSH key technologies and minimum length
- Rate limits
- Webhooks and insecure internal web services
- Information exclusivity
- How to reset your root password
- How to unlock a locked user from the command line
- User File Uploads
- How we manage the TLS protocol CRIME vulnerability
- User email confirmation at sign-up
- Security of running jobs
- Proxying assets
- CI/CD Environment Variables
- Contributor and Development Docs
- Contribute to GitLab
- Community members & roles
- Implement design & UI elements
- Issues workflow
- Merge requests workflow
- Code Review Guidelines
- Style guides
- GitLab Architecture Overview
- CI/CD development documentation
- Database guides
- Database Review Guidelines
- Database Review Guidelines
- Migration Style Guide
- What requires downtime?
- Understanding EXPLAIN plans
- Rake tasks for developers
- Mass inserting Rails models
- GitLab Documentation guidelines
- Documentation Style Guide
- Documentation structure and template
- Documentation process
- Documentation site architecture
- Global navigation
- GitLab Docs monthly release process
- Telemetry Guide
- Usage Ping Guide
- Snowplow Guide
- Experiment Guide
- Feature flags in development of GitLab
- Feature flags process
- Developing with feature flags
- Feature flag controls
- Document features deployed behind feature flags
- Frontend Development Guidelines
- Accessibility & Readability
- Ajax
- Architecture
- Axios
- Design Patterns
- Frontend Development Process
- DropLab
- Emojis
- Filter
- Frontend FAQ
- GraphQL
- Icons and SVG Illustrations
- InputSetter
- Performance
- Principles
- Security
- Tooling
- Vuex
- Vue
- Geo (development)
- Geo self-service framework (alpha)
- Gitaly developers guide
- GitLab development style guides
- API style guide
- Go standards and style guidelines
- GraphQL API style guide
- Guidelines for shell commands in the GitLab codebase
- HTML style guide
- JavaScript style guide
- Migration Style Guide
- Newlines style guide
- Python Development Guidelines
- SCSS style guide
- Shell scripting standards and style guidelines
- Sidekiq debugging
- Sidekiq Style Guide
- SQL Query Guidelines
- Vue.js style guide
- Instrumenting Ruby code
- Testing standards and style guidelines
- Flaky tests
- Frontend testing standards and style guidelines
- GitLab tests in the Continuous Integration (CI) context
- Review Apps
- Smoke Tests
- Testing best practices
- Testing levels
- Testing Rails migrations at GitLab
- Testing Rake tasks
- End-to-end Testing
- Beginner's guide to writing end-to-end tests
- End-to-end testing Best Practices
- Dynamic Element Validation
- Flows in GitLab QA
- Page objects in GitLab QA
- Resource class in GitLab QA
- Style guide for writing end-to-end tests
- Testing with feature flags
- Translate GitLab to your language
- Internationalization for GitLab
- Translating GitLab
- Proofread Translations
- Merging translations from CrowdIn
- Value Stream Analytics development guide
- GitLab subscription
- Activate GitLab EE with a license