# Reduce repository size
> 原文:[https://docs.gitlab.com/ee/user/project/repository/reducing_the_repo_size_using_git.html](https://docs.gitlab.com/ee/user/project/repository/reducing_the_repo_size_using_git.html)
* [Purge files from repository history](#purge-files-from-repository-history)
* [Purge files from GitLab storage](#purge-files-from-gitlab-storage)
* [Repository cleanup](#repository-cleanup)
* [Storage limits](#storage-limits)
# Reduce repository size[](#reduce-repository-size "Permalink")
随着时间的流逝,Git 存储库变得越来越大. 将大文件添加到 Git 存储库后:
* 由于每个人都必须下载文件,因此获取存储库的速度变慢.
* 它们占用服务器上的大量存储空间.
* [可以达到](#storage-limits) Git 仓库的存储限制.
重写存储库可能会删除不需要的历史记录,从而使存储库更小. [`git filter-repo`](https://github.com/newren/git-filter-repo)是用于快速重写 Git 存储库历史记录的工具,建议同时使用以下两种工具:
* [`git filter-branch`](https://git-scm.com/docs/git-filter-branch).
* [BFG](https://rtyley.github.io/bfg-repo-cleaner/).
**危险:**重写存储库历史记录是一种破坏性操作. 在开始之前,请确保备份您的存储库. 备份存储库的最佳方法是[导出项目](../settings/import_export.html#exporting-a-project-and-its-data) .**注意:** Git LFS 文件只能由管理员使用[Rake 任务](../../../raketasks/cleanup.html)删除. [计划](https://gitlab.com/gitlab-org/gitlab/-/issues/223621)消除此限制.
## Purge files from repository history[](#purge-files-from-repository-history "Permalink")
为了使克隆项目更快,请重写分支和标签以删除不需要的文件.
1. 使用受支持的程序包管理器或从源代码[安装`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md) .
2. 使用`--bare`克隆存储库的新副本:
```
git clone --bare https://example.gitlab.com/my/project.git
```
3. 使用`git filter-repo` ,从存储库的历史记录中清除所有文件.
要清除大文件,可以使用`--strip-blobs-bigger-than`选项:
```
git filter-repo --strip-blobs-bigger-than 10M
```
要清除使用 Git LFS 存储的大文件,可以使用`--blob--callback`选项. 下面的示例使用回调从 Git LFS 指针读取文件大小,并删除大于 10MB 的文件.
```
git filter-repo --blob-callback '
if blob.data.startswith(b"version https://git-lfs.github.com/spec/v1"):
size_in_bytes = int.from_bytes(blob.data[124:], byteorder="big")
if size_in_bytes > 10*1000:
blob.skip()
'
```
要按路径清除特定的大文件,可以组合使用`--path`和`--invert-paths`选项:
```
git filter-repo --path path/to/big/file.m4v --invert-paths
```
有关更多示例和完整文档,请参见[`git filter-repo`](https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html#EXAMPLES)文档.
4. 运行`git filter-repo`会删除所有遥控器. 要为您的项目还原遥控器,请运行:
```
git remote add origin https://example.gitlab.com/<namespace>/<project_name>.git
```
5. 强制推送更改以覆盖 GitLab 上的所有分支:
```
git push origin --force --all
```
[受保护的分支](../protected_branches.html)将导致此操作失败. 要继续,您必须删除分支保护,推送,然后重新启用受保护的分支.
6. 要从标记的发行版中删除大文件,请强制将更改推送到 GitLab 上的所有标记:
```
git push origin --force --tags
```
[受保护的标签](../protected_tags.html)将导致此操作失败. 要继续,您必须删除标签保护,推送,然后重新启用受保护的标签.
7. 手动执行[项目整理](../../../administration/housekeeping.html#manual-housekeeping)
**注意:**为提高性能而缓存了项目统计信息. 您可能需要等待 5 到 10 分钟才能看到存储利用率下降.
## Purge files from GitLab storage[](#purge-files-from-gitlab-storage "Permalink")
要减少 GitLab 中存储库的大小,必须删除 GitLab 内部引用以包含大文件的提交. 在完成这些步骤之前,请[从存储库历史记录中清除文件](#purge-files-from-repository-history) .
除了[分支](branches/index.html)和标签(这是一种 Git 引用)之外,GitLab 还会自动创建其他引用. 这些引用可防止在查看合并请求时死链接到提交或丢失差异. [存储库清理](#repository-cleanup)可用于从 GitLab 中删除它们.
以下内部参考文献不做广告:
* `refs/merge-requests/*`用于合并请求.
* `refs/pipelines/*` for [pipelines](../../../ci/pipelines/index.html#troubleshooting-fatal-reference-is-not-a-tree).
* `refs/environments/*`用于环境.
这意味着在获取时通常不包含它们,这使得获取速度更快. 另外, `refs/keep-around/*`是隐藏的 refs,以防止与讨论相关的提交被删除并且根本无法被获取.
但是,可以从项目导出内的 Git 捆绑包访问这些引用.
1. 使用受支持的程序包管理器或从源代码[安装`git filter-repo`](https://github.com/newren/git-filter-repo/blob/main/INSTALL.md) .
2. [从项目中](../settings/import_export.html#exporting-a-project-and-its-data)生成一个新的[导出](../settings/import_export.html#exporting-a-project-and-its-data)并下载.
3. 使用`tar`解压缩备份:
```
tar xzf project-backup.tar.gz
```
这将包含一个由[`git bundle`](https://git-scm.com/docs/git-bundle)创建的`project.bundle`文件.
4. 从包中克隆存储库的新副本:
```
git clone --bare --mirror /path/to/project.bundle
```
5. 使用`git filter-repo` ,从存储库的历史记录中清除所有文件. 因为我们正在尝试删除内部引用,所以我们将依靠每次运行生成的`commit-map`来告诉我们要删除哪些内部引用.
**注意:** `git filter-repo`每次运行都会创建一个新的`commit-map`文件,并覆盖前一次运行的`commit-map` . **每次**运行都将需要此文件. 每次运行`git filter-repo`都要执行下一步.
要清除所有大文件,可以使用`--strip-blobs-bigger-than`选项:
```
git filter-repo --strip-blobs-bigger-than 10M
```
要按路径清除特定的大文件,可以组合使用`--path`和`--invert-paths`选项.
```
git filter-repo --path path/to/big/file.m4v --invert-paths
```
有关更多示例和完整文档,请参见[`git filter-repo`](https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html#EXAMPLES)文档.
6. 运行[存储库清理](#repository-cleanup) .
## Repository cleanup[](#repository-cleanup "Permalink")
在 GitLab 11.6 中[引入](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/19376) .
仓库清理允许您上传对象的文本文件,并且 GitLab 将删除对这些对象的内部 Git 引用. 您可以使用[`git filter-repo`](https://github.com/newren/git-filter-repo)生成对象列表(在`commit-map`文件中),该对象列表可与存储库清理一起使用.
要清理存储库:
1. 转到存储库的项目.
2. 导航 **设置>存储库** .
3. 上载对象列表. 例如,一个`commit-map`文件.
4. Click **开始清理**.
这将:
* 删除所有对旧提交的内部 Git 引用.
* 针对存储库运行`git gc` .
完成后,您将收到一封电子邮件.
When using repository cleanup, note:
* 项目统计信息已缓存. 您可能需要等待 5 到 10 分钟才能看到存储利用率下降.
* 客房部修剪 2 周以上的松散物品. 这意味着在最近 2 周内添加的对象将不会立即删除. 如果您有权访问[Gitaly](../../../administration/gitaly/index.html)服务器,则可以运行`git gc --prune=now`立即修剪所有松散的对象.
* 此过程将从 GitLab 的缓存和数据库中删除一些重写提交的副本,但是覆盖范围仍然存在许多空白,并且某些副本可能会无限期地存在. [清除实例缓存](../../../administration/raketasks/maintenance.html#clear-redis-cache)可能有助于删除其中的一些[实例](../../../administration/raketasks/maintenance.html#clear-redis-cache) ,但出于安全考虑,不应依赖它!
## Storage limits[](#storage-limits "Permalink")
储存库大小限制:
* 可以[由管理员](../../admin_area/settings/account_and_limit_settings.html#repository-size-limit-starter-only)在自我管理实例上设置.
* Are [set for GitLab.com](../../gitlab_com/index.html#repository-size-limit).
当项目达到其大小限制时,您不能:
* 推送到项目.
* 创建一个新的合并请求.
* 合并现有的合并请求.
* 上载 LFS 对象.
您仍然可以:
* 创造新问题.
* 克隆项目.
如果超出存储库大小限制,则可以尝试:
1. 删除一些数据.
2. 进行新的提交.
3. 推回存储库.
也许您还可以:
* 将一些斑点移到 LFS.
* 从历史记录中删除一些旧的依赖项更新.
不幸的是,该工作流程无法正常工作. 实际上,在提交中删除文件并不会减小存储库的大小,因为早期的提交和 Blob 仍然存在.
您需要做的是重写历史记录. 我们建议使用开源社区维护的工具[`git filter-repo`](https://github.com/newren/git-filter-repo) .
**注意:**在 GitLab 端运行`git gc`之前,"已删除"的提交和 blob 仍将存在. 您还必须能够将重写的历史记录推送到 GitLab,如果您已经超过最大大小限制,则可能无法实现.
为了解除这些限制,自我管理的 GitLab 实例的管理员必须增加对超出它的特定项目的限制. 因此,最好始终主动保持在限制之下. 如果您达到了极限,并且无法暂时提高极限,则唯一的选择是:
1. 在本地修剪所有不需要的东西.
2. 在 GitLab 上创建一个新项目,然后开始使用它.
**Caution:** This process is not suitable for removing sensitive data like password or keys from your repository. Information about commits, including file content, is cached in the database, and will remain visible even after they have been removed from the repository.
- 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