{"id":17127454,"url":"https://github.com/tnir/gitaly","last_synced_at":"2026-02-11T08:36:38.552Z","repository":{"id":40007035,"uuid":"230547701","full_name":"tnir/gitaly","owner":"tnir","description":"Gitaly mirror from https://gitlab.com/gitlab-org/gitaly","archived":false,"fork":false,"pushed_at":"2023-03-08T20:27:35.000Z","size":34068,"stargazers_count":0,"open_issues_count":35,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-07T11:48:29.443Z","etag":null,"topics":["git","gitaly","gitlab-gitaly","gitlay-server","grpc-service","hacktoberfest"],"latest_commit_sha":null,"homepage":"https://gitlab.com/gitlab-org/gitaly","language":"Go","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tnir.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-12-28T02:32:21.000Z","updated_at":"2022-04-15T04:48:48.000Z","dependencies_parsed_at":"2024-06-21T08:35:15.021Z","dependency_job_id":"9c5a65eb-a752-4212-97c8-2e7dd8ed2373","html_url":"https://github.com/tnir/gitaly","commit_stats":{"total_commits":7665,"total_committers":162,"mean_commits":47.31481481481482,"dds":0.6798434442270058,"last_synced_commit":"ccfab390f7c32dae9d5683662be62d27c80f768f"},"previous_names":[],"tags_count":626,"template":false,"template_full_name":null,"purl":"pkg:github/tnir/gitaly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tnir%2Fgitaly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tnir%2Fgitaly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tnir%2Fgitaly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tnir%2Fgitaly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tnir","download_url":"https://codeload.github.com/tnir/gitaly/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tnir%2Fgitaly/sbom","scorecard":{"id":890468,"data":{"date":"2025-08-11","repo":{"name":"github.com/tnir/gitaly","commit":"ccfab390f7c32dae9d5683662be62d27c80f768f"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":0,"reason":"81 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-pfpr-3463-c6jh","Warn: Project is vulnerable to: GHSA-pphf-gfrm-v32r","Warn: Project is vulnerable to: GHSA-5pq7-52mg-hr42","Warn: Project is vulnerable to: GHSA-2rxp-v6pw-ch6m","Warn: Project is vulnerable to: GHSA-4xqq-m2hx-25v8","Warn: Project is vulnerable to: GHSA-5866-49gr-22v4","Warn: Project is vulnerable to: GHSA-r55c-59qm-vjw6","Warn: Project is vulnerable to: GHSA-vg3r-rm7w-2xgh","Warn: Project is vulnerable to: GHSA-vmwr-mc7x-5vc3","Warn: Project is vulnerable to: GO-2021-0073 / GHSA-w4xh-w33p-4v29","Warn: Project is vulnerable to: GHSA-4g4p-42wc-9f3m","Warn: Project is vulnerable to: GHSA-cx3w-xqmc-84g5","Warn: Project is vulnerable to: GO-2025-3390 / GHSA-q6r2-x2cc-vrp7","Warn: Project is vulnerable to: GO-2024-2456 / GHSA-449p-3h89-pw88","Warn: Project is vulnerable to: GO-2024-2466 / GHSA-mw99-9chc-xw7r","Warn: Project is vulnerable to: GO-2025-3367 / GHSA-r9px-m959-cxf4","Warn: Project is vulnerable to: GO-2025-3368 / GHSA-v725-9546-7q7m","Warn: Project is vulnerable to: GO-2024-2605 / GHSA-m7wr-2xf7-cm9p","Warn: Project is vulnerable to: GO-2024-2606 / GHSA-mrww-27vc-gghv","Warn: Project is vulnerable to: GO-2022-0322 / GHSA-cg3q-j54f-5p7p","Warn: Project is vulnerable to: GO-2022-0493 / GHSA-p782-xgp4-8hr8","Warn: Project is vulnerable to: GO-2023-2153 / GHSA-m425-mq94-257g / GHSA-qppj-fm5r-hxr3","Warn: Project is vulnerable to: GO-2024-2611 / GHSA-8r3f-844c-mc37","Warn: Project is vulnerable to: GHSA-4g8v-vg43-wpgf","Warn: Project is vulnerable to: GHSA-8xww-x3g3-6jcv","Warn: Project is vulnerable to: GHSA-fwhr-88qx-h9g7","Warn: Project is vulnerable to: GHSA-mm33-5vfq-3mm3","Warn: Project is vulnerable to: GHSA-p84v-45xj-wwqj","Warn: Project is vulnerable to: GHSA-vfg9-r3fq-jvx4","Warn: Project is vulnerable to: GHSA-vfm5-rmrh-j26v","Warn: Project is vulnerable to: GHSA-x76w-6vjr-8xgj","Warn: Project is vulnerable to: GHSA-ch3h-j2vf-95pv","Warn: Project is vulnerable to: GHSA-xp5h-f8jf-rc8q","Warn: Project is vulnerable to: GHSA-cr5q-6q9f-rq6q","Warn: Project is vulnerable to: GHSA-j6gc-792m-qgm2","Warn: Project is vulnerable to: GHSA-pj73-v5mw-pm9j","Warn: Project is vulnerable to: GHSA-jxhc-q857-3j6g","Warn: Project is vulnerable to: GHSA-735f-pc8j-v9w8","Warn: Project is vulnerable to: GHSA-h4h5-3hr4-j3g2","Warn: Project is vulnerable to: GHSA-wrvw-hg22-4m67","Warn: Project is vulnerable to: GHSA-496j-2rq6-j6cc","Warn: Project is vulnerable to: GHSA-228g-948r-83gx","Warn: Project is vulnerable to: GHSA-3x8r-x6xp-q4vm","Warn: Project is vulnerable to: GHSA-486f-hjj9-9vhh","Warn: Project is vulnerable to: GHSA-2qc6-mcvw-92cw","Warn: Project is vulnerable to: GHSA-353f-x4gh-cqq8","Warn: Project is vulnerable to: GHSA-5w6v-399v-w3cc","Warn: Project is vulnerable to: GHSA-cgx6-hpwq-fhv5","Warn: Project is vulnerable to: GHSA-crjr-9rc5-ghw8","Warn: Project is vulnerable to: GHSA-gx8x-g87m-h5q6","Warn: Project is vulnerable to: GHSA-jc36-42cf-vqwj","Warn: Project is vulnerable to: GHSA-mrxw-mxhj-p664","Warn: Project is vulnerable to: GHSA-pxvg-2qj5-37jq","Warn: Project is vulnerable to: GHSA-r95h-9x8f-r3f7","Warn: Project is vulnerable to: GHSA-v6gp-9mmm-c6p5","Warn: Project is vulnerable to: GHSA-vvfq-8hwr-qm4m","Warn: Project is vulnerable to: GHSA-xc9x-jj77-9p9j","Warn: Project is vulnerable to: GHSA-xh29-r2w5-wx8m","Warn: Project is vulnerable to: GHSA-xxx9-3xcr-gjj3","Warn: Project is vulnerable to: GHSA-22f2-v57c-j9cx","Warn: Project is vulnerable to: GHSA-3h57-hmj3-gj3p","Warn: Project is vulnerable to: GHSA-54rr-7fvw-6x8f","Warn: Project is vulnerable to: GHSA-65f5-mfpf-vfhj","Warn: Project is vulnerable to: GHSA-7g2v-jj9q-g3rg","Warn: Project is vulnerable to: GHSA-7wqh-767x-r66v","Warn: Project is vulnerable to: GHSA-8cgq-6mh2-7j6v","Warn: Project is vulnerable to: GHSA-93pm-5p5f-3ghx","Warn: Project is vulnerable to: GHSA-c6qg-cjj8-47qp","Warn: Project is vulnerable to: GHSA-gjh7-p2fx-99vx","Warn: Project is vulnerable to: GHSA-hxqx-xwvh-44m2","Warn: Project is vulnerable to: GHSA-rqv2-275x-2jq5","Warn: Project is vulnerable to: GHSA-vpfw-47h7-xj4g","Warn: Project is vulnerable to: GHSA-wq4h-7r42-5hrr","Warn: Project is vulnerable to: GHSA-xj5v-6v4g-jfw6","Warn: Project is vulnerable to: GHSA-5x79-w82f-gw8w","Warn: Project is vulnerable to: GHSA-9h9g-93gc-623h","Warn: Project is vulnerable to: GHSA-mcvf-2q2m-x72m","Warn: Project is vulnerable to: GHSA-pg8v-g4xq-hww9","Warn: Project is vulnerable to: GHSA-rrfc-7g8p-99q8","Warn: Project is vulnerable to: GHSA-f5ww-cq3m-q3g7","Warn: Project is vulnerable to: GHSA-fw3g-2h3j-qmm7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-24T11:37:33.762Z","repository_id":40007035,"created_at":"2025-08-24T11:37:33.763Z","updated_at":"2025-08-24T11:37:33.763Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29329929,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T06:13:03.264Z","status":"ssl_error","status_checked_at":"2026-02-11T06:12:55.843Z","response_time":97,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","gitaly","gitlab-gitaly","gitlay-server","grpc-service","hacktoberfest"],"created_at":"2024-10-14T19:04:41.504Z","updated_at":"2026-02-11T08:36:38.536Z","avatar_url":"https://github.com/tnir.png","language":"Go","readme":"# ![Gitaly](https://gitlab.com/gitlab-org/gitaly/uploads/509123ed56bd51247996038c858db006/gitaly-wordmark-small.png)\n\n**Quick Links**:\n  [**Roadmap**][roadmap] |\n  [Want to Contribute?](https://gitlab.com/gitlab-org/gitaly/issues?scope=all\u0026utf8=%E2%9C%93\u0026state=opened\u0026label_name[]=Accepting%20merge%20requests) |\n  [GitLab Gitaly Issues](https://gitlab.com/groups/gitlab-org/-/issues?scope=all\u0026state=opened\u0026utf8=%E2%9C%93\u0026label_name%5B%5D=Gitaly) |\n  [GitLab Gitaly Merge Requests](https://gitlab.com/groups/gitlab-org/-/merge_requests?label_name%5B%5D=Gitaly) |\n\n--------------------------------------------\n\nGitaly is a Git [RPC](https://en.wikipedia.org/wiki/Remote_procedure_call)\nservice for handling all the git calls made by GitLab.\n\nTo see where it fits in please look at [GitLab's architecture](https://docs.gitlab.com/ce/development/architecture.html#system-layout).\n\n## Project Goals\n\nFault-tolerant horizontal scaling of Git storage in GitLab, and particularly, on [gitlab.com](https://gitlab.com).\n\nThis will be achieved by focusing on two areas (in this order):\n\n  1. **Migrate from repository access via NFS to gitaly-proto, GitLab's new Git RPC protocol**\n  1. **Evolve from large Gitaly servers managed as \"pets\" to smaller Gitaly servers that are \"cattle\"**\n\n## Current Status\n\nAs of GitLab 11.5, almost all application code accesses Git repositories\nthrough Gitaly instead of direct disk access. GitLab.com production no\nlonger uses direct disk access to touch Git repositories; the [NFS\nmounts have been\nremoved](https://about.gitlab.com/2018/09/12/the-road-to-gitaly-1-0/).\n\nFor performance reasons some RPCs can be performed through NFS still. An\neffort is made to mitigate performance issues by removing [Gitaly N+1](https://gitlab.com/groups/gitlab-org/-/epics/827).\nOnce that is no longer necessary we can conclude the migration project by\n[removing the Git repository storage paths from gitlab-rails's\nconfiguration](https://gitlab.com/gitlab-org/gitaly/issues/1282).\n\nIn the meantime we are building features according to our [roadmap][roadmap].\n\nIf you're interested in seeing how well Gitaly is performing on\nGitLab.com, read about our [observability story](doc/observability.md)!\n\n##### Overall\n\n[![image](https://gitlab.com/gitlab-org/gitaly/uploads/c3aa987884d5e78c3567a3a7469ea6c2/overview.png)](https://dashboards.gitlab.com/d/gitaly-main/gitaly-overview)\n\n##### By Feature\n\n[![image](https://gitlab.com/gitlab-org/gitaly/uploads/3e8a5616863fa17c5bf08cb67c1bb385/feature.png)](https://dashboards.gitlab.com/d/000000198/gitaly-features-overview)\n\n## Installation\n\nMost users won't install Gitaly on its own. It is already included in\n[your GitLab installation](https://about.gitlab.com/install/).\n\nGitaly requires Go 1.16 or Go 1.17 and Ruby 2.7. Run `make` to download and\ncompile Ruby dependencies, and to compile the Gitaly Go executable.\n\nGitaly uses `git`. Versions `2.33.0` and newer are supported.\n\n## Configuration\n\nThe administration and reference guide is [documented in the GitLab project](https://docs.gitlab.com/ee/administration/gitaly/).\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Name\n\nGitaly is a tribute to git and the town of [Aly](https://en.wikipedia.org/wiki/Aly). Where the town of\nAly has zero inhabitants most of the year we would like to reduce the number of\ndisk operations to zero for most actions. It doesn't hurt that it sounds like\nItaly, the capital of which is [the destination of all roads](https://en.wikipedia.org/wiki/All_roads_lead_to_Rome). All git actions in\nGitLab end up in Gitaly.\n\n## Design\n\nHigh-level architecture overview:\n\n![Gitaly Architecture](https://docs.google.com/drawings/d/14-5NHGvsOVaAJZl2w7pIli8iDUqed2eIbvXdff5jneo/pub?w=2096\u0026h=1536)\n\n[Edit this diagram directly in Google Drawings](https://docs.google.com/drawings/d/14-5NHGvsOVaAJZl2w7pIli8iDUqed2eIbvXdff5jneo/edit)\n\n### Gitaly clients\n\nAs of Q4 2018, the following GitLab components act as Gitaly clients:\n\n-   [gitlab-rails](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/lib/gitlab/gitaly_client.rb):\n    the main GitLab Rails application.\n-   [gitlab-shell](https://gitlab.com/gitlab-org/gitlab-shell/tree/master):\n    for `git clone`, `git push` etc. via SSH.\n-   [gitlab-workhorse](https://gitlab.com/gitlab-org/gitlab-workhorse/blob/master/internal/gitaly/gitaly.go):\n    for `git clone` via HTTPS and for slow requests that serve raw Git\n    data.\n    ([example](https://gitlab.com/gitlab-org/gitaly/raw/master/README.md))\n-   [gitaly-ssh](https://gitlab.com/gitlab-org/gitaly/tree/master/cmd/gitaly-ssh):\n    for internal Git data transfers between Gitaly servers.\n-   [gitaly-ruby](https://gitlab.com/gitlab-org/gitaly/blob/master/ruby/lib/gitlab/git/gitaly_remote_repository.rb):\n    for RPC's that interact with more than one repository, such as\n    merging a branch.\n\nThe clients written in Go (gitlab-shell, gitlab-workhorse, gitaly-ssh)\nuse library code from the\n[gitlab.com/gitlab-org/gitaly/client](https://gitlab.com/gitlab-org/gitaly/tree/master/client)\npackage.\n\n## High Availability\n\nWe are working on a high-availability (HA) solution for Gitaly based on\nasynchronous replication. A Gitaly server would be made highly available\nby assigning one or more standby servers (\"secondaries\") to it, each of\nwhich contains a full copy of all the repository data on the primary\nGitaly server.\n\nTo implement this we are building a new GitLab component called\nPraefect, which is hosted alongside the rest of Gitaly in this\nrepository. As we currently envision it, Praefect will have four\nresponsibilities:\n\n-   route RPC traffic to the primary Gitaly server\n-   inspect RPC traffic and mark repositories as dirty if the RPC is a\n    \"mutator\"\n-   ensure dirty repositories have their changes replicated to the\n    secondary Gitaly servers\n-   in the event of a failure on the primary, demote it to secondary and\n    elect a new primary\n\nPraefect has internal state: it needs to be able to \"remember\" which\nrepositories are in need of replication, and which Gitaly server is the\nprimary. [We will use Postgres to store Praefect's internal state](doc/rfcs/praefect-queue-storage.md).\n\nAs of December 2019 we are busy rolling out the Postgres integration in\nPraefect. The minimum supported Postgres version is 9.6, just like the\nrest of GitLab.\n\n## Further reading\n\nMore about the project and its processes is [detailed in the docs](doc/README.md).\n\n## Distributed Tracing\n\nGitaly supports distributed tracing through [LabKit](https://gitlab.com/gitlab-org/labkit/) using [OpenTracing APIs](https://opentracing.io).\n\nBy default, no tracing implementation is linked into the binary, but different OpenTracing providers can be linked in using [build tags](https://golang.org/pkg/go/build/#hdr-Build_Constraints)/[build constraints](https://golang.org/pkg/go/build/#hdr-Build_Constraints). This can be done by setting the `BUILD_TAGS` make variable.\n\nFor more details of the supported providers, see LabKit, but as an example, for Jaeger tracing support, include the tags: `BUILD_TAGS=\"tracer_static tracer_static_jaeger\"`.\n\n```shell\n$ make BUILD_TAGS=\"tracer_static tracer_static_jaeger\"\n```\n\nOnce Gitaly is compiled with an opentracing provider, the tracing configuration is configured via the `GITLAB_TRACING` environment variable.\n\nFor example, to configure Jaeger, you could use the following command:\n\n```shell\nGITLAB_TRACING=opentracing://jaeger ./gitaly config.toml\n```\n\n## Continuous Profiling\n\nGitaly supports Continuous Profiling through [LabKit][] using [Stackdriver Profiler](https://cloud.google.com/profiler).\n\nFor more information on how to set it up, see the [LabKit monitoring docs](https://gitlab.com/gitlab-org/labkit/-/blob/master/monitoring/doc.go).\n\n## Presentations\n\n- [How to configure backpressure in Gitaly](https://youtu.be/wX9CtFdLYxE)\n\n    An overview of the knobs in the Gitaly config to set limits on incoming traffic.\n    There is also [written documentation](doc/backpressure.md).\n\n- [How Gitaly fits into GitLab (Youtube)](https://www.youtube.com/playlist?list=PL05JrBw4t0KqoFUiX42JG7BAc7pipMBAy) - a series of 1-hour training videos for contributors new to GitLab and Gitaly.\n  - [Part 1: the Gitaly client in gitlab-ce, 2019-02-21](https://www.youtube.com/watch?v=j0HNiKCnLTI\u0026list=PL05JrBw4t0KqoFUiX42JG7BAc7pipMBAy)\n\n      Overview of GitLab backend processes, gitlab-rails deep dive: Gitaly\n      config in gitlab-rails, SQL data model, overview of how Gitaly calls get\n      made via GitalyClient.call.\n\n  - [Part 2: Git SSH, 2019-02-28](https://www.youtube.com/watch?v=0kY0HPFn25o\u0026list=PL05JrBw4t0KqoFUiX42JG7BAc7pipMBAy)\n\n      What is in a gitaly-proto Repository message, legacy vs\n      hashed storage (repository directories), `git clone` via SSH,\n      gitlab-shell, `authorized_keys` and forced commands, what happens\n      during `git push`.\n\n  - [Part 3: Git push, 2019-03-07](https://www.youtube.com/watch?v=-kXYycFYDzo\u0026list=PL05JrBw4t0KqoFUiX42JG7BAc7pipMBAy)\n\n      A closer look at the final stage of `git push` where the git hooks run\n      and the refs get updated. Interaction between the git hooks and GitLab\n      internal API. The Git\n      [object quarantine mechanism](https://git-scm.com/docs/git-receive-pack#_quarantine_environment).\n      Preview of Git HTTP (to be discussed next time).\n\n  - [Part 4: Git HTTP, 2019-03-14](https://www.youtube.com/watch?v=lM13p8lCu8A\u0026list=PL05JrBw4t0KqoFUiX42JG7BAc7pipMBAy)\n\n      Intercepting Git HTTP traffic with mitmproxy, overview of\n      Git HTTP clone steps, code walk in gitlab-workhorse and gitlab-ce,\n      investigating internal workhorse API messages used for Git HTTP.\n\n  - [Part 5: Merge Requests across Forks, 2019-03-21](https://www.youtube.com/watch?v=yGSuOz0XOHQ\u0026list=PL05JrBw4t0KqoFUiX42JG7BAc7pipMBAy)\n\n      Fixing a locally broken Ruby gem C\n      extension by recompiling, demo of how creating a MR across forks\n      causes new commits to suddenly appear in the fork parent repository,\n      deep dive into the FetchSourceBranch RPC, adding debug code to see\n      how address and authentication metadata is passed down to\n      gitaly-ruby, failed attempt to log gitaly-ssh arguments, comparison\n      of gitaly-ssh and gitlab-shell, a Gitaly server can end up making RPC calls to itself.\n\n  -  [Part 6: Creating Git commits on behalf of Git users, 2019-03-21](https://www.youtube.com/watch?v=Rbe0KGTLkxY\u0026list=PL05JrBw4t0KqoFUiX42JG7BAc7pipMBAy)\n\n      Demonstrate how usually Git hooks are run by\n      `git-receive-pack`, but sometimes by `gitaly-ruby`. Deep dive into\n      UserCommitFiles: where do those hooks actually get run? A look at\n      UserMerge. How does Gitaly make merge commits. A look at the\n      implementation of the special feature where users are not allowed\n      push to a branch, but are allowed to merge into it.\n\n  -  [Part 7: How Gitaly uses Prometheus monitoring, 2019-07-09](https://youtu.be/R6F674Nj3wI)\n\n      What is [Prometheus](https://prometheus.io/). Reconstructing a\n     [Grafana](https://dashboards.gitlab.com) dashboard panel\n      with\n      [PromQL](https://prometheus.io/docs/prometheus/latest/querying/basics/).\n      Adding a new counter to Gitaly. Querying Prometheus in Gitaly\n      during development. Comparing latency calculation with\n      [ELK](https://log.gitlab.net). [GRPC Prometheus\n      middleware](https://github.com/grpc-ecosystem/go-grpc-prometheus)\n      in Gitaly.\n\n- [TheConf talk on Scaling GitLab git storage with Gitaly, 2019-08-16](https://speakerdeck.com/olsfer/how-gitlab-scaled-git-access-with-a-go-service)\n- [Infrastructure Team Update 2017-05-11](https://about.gitlab.com/2017/05/11/functional-group-updates/#infrastructure-team)\n- [Gitaly Basics, 2017-05-01](https://docs.google.com/presentation/d/1cLslUbXVkniOaeJ-r3s5AYF0kQep8VeNfvs0XSGrpA0/edit#slide=id.g1c73db867d_0_0)\n- [Git Paris meetup, 2017-02-22](https://docs.google.com/presentation/d/19OZUalFMIDM8WujXrrIyCuVb_oVeaUzpb-UdGThOvAo/edit?usp=sharing) a high-level overview of what our plans are and where we are.\n\n[roadmap]: https://gitlab.com/groups/gitlab-org/-/roadmap?scope=all\u0026utf8=%E2%9C%93\u0026label_name[]=group%3A%3Agitaly\n[LabKit]: https://gitlab.com/gitlab-org/labkit/\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftnir%2Fgitaly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftnir%2Fgitaly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftnir%2Fgitaly/lists"}