# 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