Source Code - Gitaly Touch Points
Gitaly is a wrapper around the
git binary, running in a Gitaly Cluster. It provides managed access to the file system housing the
git repositories, using Go Remote Procedure Calls (RPCs). Other functions are access optimization, caching, and a form of pagination against the file system.
The comprehensive Beginner’s guide to Gitaly contributions is focused on making updates to Gitaly, and offers many insights into how to understand the Gitaly code.
All access to Gitaly from other parts of GitLab are through Create: Source Code endpoints:
After a call is made to Gitaly, Git
commit information is stored in memory. This information is wrapped by the Ruby
Commit Model, which is a wrapper around
Commit model acts like an ActiveRecord object, but it does not have a PostgreSQL backend. Instead, it maps back to Gitaly RPCs.
Historically in GitLab, access to the server-based
git repositories was provided through the rugged RubyGem, which provides Ruby bindings to
libgit2. This was further extended by what is termed “Rugged Patches”, a set of extensions to the Rugged library. Rugged implementations of some of the most commonly-used RPCs can be enabled via feature flags.
Rugged access requires the use of a NFS file system, a direction GitLab is moving away from in favor of Gitaly Cluster. Rugged has been proposed for deprecation and removal. Several large customers are still using NFS, and a specific removal date is not planned at this point.