# Merge requests workflow
> 原文:[https://docs.gitlab.com/ee/development/contributing/merge_request_workflow.html](https://docs.gitlab.com/ee/development/contributing/merge_request_workflow.html)
* [Merge request guidelines](#merge-request-guidelines)
* [Keep it simple](#keep-it-simple)
* [Commit messages guidelines](#commit-messages-guidelines)
* [Contribution acceptance criteria](#contribution-acceptance-criteria)
* [Definition of done](#definition-of-done)
* [Dependencies](#dependencies)
* [Incremental improvements](#incremental-improvements)
# Merge requests workflow[](#merge-requests-workflow "Permalink")
We welcome merge requests from everyone, with fixes and improvements to GitLab code, tests, and documentation. The issues that are specifically suitable for community contributions are listed with the [`Accepting merge requests`](issue_workflow.html#label-for-community-contributors) label, but you are free to contribute to any issue you want.
请注意,如果在任何时候都为当前里程碑标记了一个问题,即使您正在处理它,则 GitLab Inc.团队成员可能会接管合并请求,以确保工作在发布日期之前完成.
如果要添加未标记的新功能,最好首先创建一个问题(如果还没有一个问题)并发表评论,要求将其标记为" `Accepting Merge Requests` . 如果还可以更改用户界面,请提供建议功能的屏幕截图或线框.
合并请求应提交到 GitLab.com 上的相应项目,例如[GitLab](https://gitlab.com/gitlab-org/gitlab/-/merge_requests) , [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests) , [Omnibus GitLab](https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests)等.
如果您不熟悉 GitLab 开发(或一般而言的 Web 开发),请参阅" [如何做出贡献"](index.html#how-to-contribute)部分,以开始解决一些潜在的简单问题.
要开始开发 GitLab,请下载[GitLab 开发套件,](https://gitlab.com/gitlab-org/gitlab-development-kit)并参阅" [开发"部分](../../README.html)以获取所需指南.
## Merge request guidelines[](#merge-request-guidelines "Permalink")
如果发现问题,请提交包含修复或改进的合并请求(如果可以),并包括测试. 如果您不知道如何解决该问题,但是可以编写暴露该问题的测试,我们也将接受. 通常,包含回归测试的错误修复将快速合并,而没有适当测试的新功能可能会更慢地接收反馈. 进行合并请求的工作流程如下:
1. [叉](../../user/project/repository/forking_workflow.html)项目插入 GitLab.com 您的个人命名空间(或一组).
2. 在 fork 中创建一个功能分支(不要使用`master` ).
3. 编写[测试](../rake_tasks.html#run-tests)和代码.
4. [Generate a changelog entry with `bin/changelog`](../changelog.html)
5. 如果要编写文档,请确保遵循[文档准则](../documentation/index.html) .
6. 遵循[提交消息准则](#commit-messages-guidelines) .
7. 如果您有多个提交,请通过[压缩它们](https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History#_squashing)将它们组合为几个逻辑组织的提交,但是如果您正在共享分支上,则不要更改提交历史记录.
8. 将提交推送到 fork 中的工作分支.
9. 向主 GitLab 项目中的`master`分支提交合并请求(MR).
1. 您的合并请求至少需要 1 个批准,但是根据您的更改,您可能需要其他批准. 请参阅[批准准则](../code_review.html#approval-guidelines) .
2. 您不必选择任何特定的批准人,但是如果您确实希望特定的人批准您的合并请求,则可以选择.
10. MR 标题应描述您要进行的更改.
11. MR 说明应说明您进行更改的原因.
1. 如果您要提供代码,请根据"描述"字段中已经提供的默认模板填写描述.
2. 如果您要提供文档,请从"选择模板"菜单中选择" `Documentation` ",然后根据模板填写说明.
3. 提及合并请求解决的问题,合并请求合并后,使用" `Solves #XXX`或" `Closes #XXX`语法[自动关闭](../../user/project/issues/managing_issues.html#closing-issues-automatically)问题.
12. 如果允许,请设置相关的里程碑和[标签](issue_workflow.html) .
13. UI 更改应使用 GitLab 设计系统" [睡衣"中的](https://design.gitlab.com/)可用组件. MR 必须包含" *之前*和*之后"*屏幕截图.
14. 如果 MR 更改了 CSS 类,请包括受影响页面的列表,可以通过运行`grep css-class ./app -R`来找到.
15. 如果您的 MR 触摸了执行 Shell 命令,读取或打开文件或处理磁盘上文件路径的代码,请确保它符合[Shell 命令准则](../shell_commands.html)
16. 如果您的代码在磁盘上创建了新文件,请阅读[共享文件准则](../shared_files.html) .
17. 如果您的合并请求添加了一个或多个迁移,请确保在审阅 MR 之前对新数据库执行所有迁移. 如果检查导致 MR 发生较大变化,请在检查完成后再次执行迁移.
18. 为更复杂的迁移编写测试.
19. 合并请求**必须**遵守[合并请求性能准则](../merge_request_performance_guidelines.html) .
20. 对于使用 Capybara 的测试,请阅读[如何编写可靠的异步集成测试](https://thoughtbot.com/blog/write-reliable-asynchronous-integration-tests-with-capybara) .
21. 如果从源安装 GitLab 时,合并请求中引入的更改需要其他步骤, `doc/install/installation.md`在同一合并请求中将它们添加到`doc/install/installation.md`中.
22. 如果您的合并请求引入了从源代码升级 GitLab 时需要其他步骤的更改,请在同一合并请求中将它们添加到`doc/update/upgrading_from_source.md`中. 如果这些说明是特定于版本的,请将它们添加到"特定于版本的升级说明"部分.
23. 阅读并遵守[合并请求作者的责任](../code_review.html#the-responsibility-of-the-merge-request-author) .
24. 阅读并关注[审核您的合并请求](../code_review.html#having-your-merge-request-reviewed) .
如果您想对合并请求提供快速反馈,请随时提及[核心团队](https://about.gitlab.com/community/core-team/)或[合并请求指导者之一](https://about.gitlab.com/company/team/) . 在审查您的代码以及审查合并请求时,请牢记[代码审查准则](../code_review.html) . 并且,如果您的代码也对数据库进行了更改或进行了昂贵的查询,请查看[数据库复审指南](../database_review.html) .
### Keep it simple[](#keep-it-simple "Permalink")
*进行较小的迭代.* 请保持单个 MR 中的更改量**尽可能小** . 如果您想提供较大的功能,请仔细考虑[最小的可行更改](https://about.gitlab.com/handbook/product/#the-minimally-viable-change) . 您可以将功能分为两个较小的 MR 吗? 您只能提交后端/ API 代码吗? 您可以从一个非常简单的 UI 开始吗? 您可以只做一部分重构吗?
小型 MR 更易于查看,从而导致更高的代码质量,对于 GitLab 而言,这比具有最少的提交日志更为重要. MR 越小,合并的可能性就越大. 之后,您可以发送更多 MR,以增强和扩展功能. Kubernetes 团队的《 [如何获得更快的 PR 评论》](https://github.com/kubernetes/kubernetes/blob/release-1.5/docs/devel/faster_reviews.md)文档也对此有一些建议.
### Commit messages guidelines[](#commit-messages-guidelines "Permalink")
编写提交消息时,请遵循以下准则:
* 提交主题必须包含至少 3 个字.
* 提交主题不得超过 72 个字符.
* 提交主题必须以大写字母开头.
* 提交主题不得以句号结尾.
* 提交主题和正文必须用空白行分隔.
* 提交正文每行不得包含超过 72 个字符.
* 在至少 3 个文件中更改 30 行或更多行的提交必须在提交正文中描述这些更改.
* 提交主题或正文不得包含表情符号.
* 使用问题并合并请求的完整 URL 而不是简短参考,因为它们在 GitLab 之外显示为纯文本.
* 合并请求不得包含超过 10 条提交消息.
如果不符合指导原则,MR 将不会通过[危险检查](https://gitlab.com/gitlab-org/gitlab/blob/master/danger/commit_messages/Dangerfile) . 有关更多信息,请参见[如何编写 Git 提交消息](https://chris.beams.io/posts/git-commit/) .
可以在您的计算机上使用的体现以上内容的示例提交消息模板(有关[如何应用 template 的](https://codeinthehole.com/tips/a-useful-template-for-commit-messages/)指南):
```
# (If applied, this commit will...) <subject> (Max 50 char)
# |<---- Using a Maximum Of 50 Characters ---->|
# Explain why this change is being made
# |<---- Try To Limit Each Line to a Maximum Of 72 Characters ---->|
# Provide links or keys to any relevant tickets, articles or other resources
# Use issues and merge requests' full URLs instead of short references,
# as they are displayed as plain text outside of GitLab
# --- COMMIT END ---
# --------------------
# Remember to
# Capitalize the subject line
# Use the imperative mood in the subject line
# Do not end the subject line with a period
# Subject must contain at least 3 words
# Separate subject from body with a blank line
# Commits that change 30 or more lines across at least 3 files must
# describe these changes in the commit body
# Do not use Emojis
# Use the body to explain what and why vs. how
# Can use multiple lines with "-" for bullet points in body
# For more information: https://chris.beams.io/posts/git-commit/
# --------------------
```
## Contribution acceptance criteria[](#contribution-acceptance-criteria "Permalink")
为确保您的合并请求能够获得批准,请确保其符合以下捐款接受标准:
1. 更改尽可能小.
2. 包括适当的测试并使所有测试通过(除非它包含暴露现有代码中的错误的测试). 每个新类都应具有相应的单元测试,即使该类是在较高级别上进行的,例如功能测试.
* 如果失败的 CI 构建似乎与您的贡献无关,则可以尝试重新启动失败的 CI 作业,从主服务器重新部署以引入可以解决该失败的更新,或者如果尚未解决,请请开发人员来帮助您修复测试.
3. MR 最初包含一些按逻辑组织的提交.
4. 更改可以合并而不会出现问题. 否则,如果您是功能分支上的唯一成员,则应重新设置基准,否则合并`master` .
5. 仅解决了一个特定问题或实现了一个特定功能. 不要结合东西; 针对每个问题或功能发送单独的合并请求.
6. 迁移应仅做一件事(例如,创建表,将数据移动到新表或删除旧表),以帮助重试失败.
7. 包含其他用户将从中受益的功能.
8. 不要添加配置选项或设置选项,因为它们会使进行和测试将来的更改复杂化.
9. 更改不会降低性能:
* 避免重复轮询需要大量开销的端点.
* 通过 SQL 日志或[`QueryRecorder`](../merge_request_performance_guidelines.html)检查 N + 1 个查询.
* 避免重复访问文件系统.
* 如果需要支持实时功能,可将[轮询与 ETag 缓存一起](../polling.html)使用.
10. 如果合并请求添加了任何新库(宝石,JavaScript 库等),则它们应符合我们的[许可准则](../licensing.html) . 如果" license-finder"测试失败,并且`Dependencies that need approval`错误`Dependencies that need approval`请参阅那些说明. 另外,使审阅者了解新库并解释为什么需要它.
11. 合并请求符合下面的 GitLab [对 done](#definition-of-done)的[定义](#definition-of-done) .
## Definition of done[](#definition-of-done "Permalink")
如果您为 GitLab 做贡献,请知道更改不仅涉及代码. 我们使用以下[完成的定义](https://www.agilealliance.org/glossary/definition-of-done) . 在您确定满足所有这些要求之前,您的贡献不会*完成* .
1. 清晰的说明,说明捐款的相关性.
2. 工作并清理需要注释的代码.
3. 所有通过 CI 服务器的[单元测试,集成测试和系统测试](../testing_guide/index.html) .
4. 测试涵盖了回归和错误,可降低问题再次发生的风险.
5. 遵循[性能准则](../merge_request_performance_guidelines.html) .
6. 遵循[安全编码准则](https://gitlab.com/gitlab-com/gl-security/security-guidelines) .
7. [记录](../documentation/index.html)在`/doc`目录中.
8. 如有必要, [添加了 Changelog 条目](../changelog.html) .
9. 由相关(UX / FE / BE /技术写作)审稿人审阅,并解决所有问题.
10. 由项目维护者合并.
11. 在[基础结构问题跟踪器中](https://gitlab.com/gitlab-com/gl-infra/infrastructure/-/issues)创建问题,以在您的文稿更改默认设置或引入新设置(如果相关)时通知基础结构部门.
12. 部署贡献后,确认已在[Canary 阶段](https://about.gitlab.com/handbook/engineering/#canary-testing)或 GitLab.com 上工作.
13. 添加到[发布中](https://about.gitlab.com/handbook/marketing/blog/release-posts/) (如果相关).
14. 添加到[网站](https://gitlab.com/gitlab-com/www-gitlab-com/blob/master/data/features.yml) (如果相关).
15. 如果需要, [可以](../testing_guide/testing_levels.html#black-box-tests-at-the-system-level-aka-end-to-end-tests)添加[黑盒测试/端到端测试](../testing_guide/testing_levels.html#black-box-tests-at-the-system-level-aka-end-to-end-tests) . 如有任何疑问,请联系[质量团队](https://about.gitlab.com/handbook/engineering/quality/#teams) .
## Dependencies[](#dependencies "Permalink")
如果您在 GitLab 中添加了一个依赖项(例如操作系统软件包),请考虑更新以下内容,并在合并请求中注意每个依赖项的适用性:
1. 请注意[发布博客文章中](https://about.gitlab.com/handbook/marketing/blog/release-posts/)的附加内容(如果尚不存在,请创建一个).
2. [The upgrade guide](../../update/upgrading_from_source.html).
3. The [GitLab Installation Guide](../../install/installation.html#1-packages-and-dependencies).
4. The [GitLab Development Kit](https://gitlab.com/gitlab-org/gitlab-development-kit).
5. The [CI environment preparation](https://gitlab.com/gitlab-org/gitlab/blob/master/scripts/prepare_build.sh).
6. The [Omnibus package creator](https://gitlab.com/gitlab-org/omnibus-gitlab).
## Incremental improvements[](#incremental-improvements "Permalink")
我们会在工程上花费一些时间来解决小问题(有或没有问题),这些小问题是逐步改进的,例如:
1. 未经优先考虑的错误修复(例如[,到处都显示有关项目移动的横幅警报](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/18985) )
2. 文档改进
3. Rubocop 或代码质量改进
用〜"应该工作的东西"标记合并请求,以跟踪该区域中的工作.
- 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