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, via Golang 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:

The Commit model

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 Gitlab::Git::Commit.

The Commit model acts like an ActiveRecord object, but it does not have a PostgreSQL backend. Instead, it maps back to Gitaly RPCs.

Rugged Patches

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.