BlogsGitLabGit Core Improvements and Contributions

Git Core Improvements and Contributions

Git Core Improvements and Contributions

2
posts
2013–2024

GitLab actively contributes to the core Git project, focusing on performance enhancements, new features, and improved reliability. This includes developing and upstreaming new commands like `git-replay` for efficient in-memory rebasing, optimizing commit-graph operations for faster history traversal, and preparing Git for a more robust and scalable ref backend with the 'reftable' format. Additionally, GitLab has developed its own solution, GitLab Shell, to replace Gitolite, addressing issues with synchronization, performance on large repositories, and setup complexity, leading to significant improvements in project creation time and overall stability.

2024

GitLab's contributions to Git 2.44.0

2/26/2024

This post details GitLab's contributions to Git 2.44.0, highlighting the upstreaming of `git-replay` for in-memory rebasing without worktrees, improvements to commit-graph object existence checks (including performance regressions and subsequent fixes), and significant work to prepare Git for a new 'reftable' ref backend. This includes refactoring Git to better support different ref backends and addressing issues with worktree ref databases and cloning.

2013

GitLab without gitolite

2/12/2013

This post details the decision to replace Gitolite with a custom solution called GitLab Shell. The primary motivations were to address synchronization issues between GitLab and Gitolite, performance degradation with a large number of repositories, increased setup complexity due to multiple system users, and limitations in Gitolite's ability to create repositories and keys simultaneously. GitLab Shell simplifies the architecture by consolidating users to a single 'git' user, reducing code complexity, and improving performance (e.g., 10x decrease in project creation time on gitlab.com). It also enhances stability by querying GitLab for permissions rather than relying on a separate Access Control List.