# 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. 找到**任何合格的用戶,**然后選擇所需的批準數量.
[](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)批準合并請求時,它將減少批準人所屬的所有規則的剩余批準數.
[](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)可以通過導航到項目的**"設置"** ,展開" **合并請求批準"** ,然后從" **目標"分支**下拉列表中選擇" **任何"分支** ,將這些作用域一下子作用于所有受保護的分支.
或者,您可以從" **目標"分支**下拉列表中選擇一個非常特定的受保護分支:
[](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)訪問一個開放合并請求時,可能是以下之一:
* 如果所需的批準數目*尚未*滿足,他們可以通過點擊批準它顯示的**批準**按鈕.
[](img/approve.png)
* 如果已經滿足所需的批準數量,則他們仍然可以通過單擊顯示的**"額外批準"**按鈕來**批準** .
[](img/approve_additionally.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