Как сервер Gerrit перехватывает коммиты. Ищу технические подробности

#git #server #gerrit

#git #сервер #gerrit

Вопрос:

Я понимаю, что Gerrit получает коммиты git ( update возможно, используя хук) и записывает их где-то в поддельной ссылке, пока не будет выполнена экспертная оценка, но как именно этот процесс работает с точки зрения технической реализации? И какие команды Git задействованы?

Комментарии:

1. Документация по проектированию системы Gerrit может представлять для вас интерес — gerrit-review.googlesource.com/Documentation/dev-design.html — источник также доступен здесь gerrit.googlesource.com/gerrit

Ответ №1:

Вы можете ссылаться на волшебную ссылку refs/for/<branch ref> , которая используется пользователем при отправке новых коммитов.

Чтобы создать новые изменения для проверки, просто нажмите на волшебную refs/for/'branch' ссылку проекта, используя любой инструмент клиента Git:

 git push ssh://sshusername@hostname:29418/projectname HEAD:refs/for/branch
  

Например, john.doe можно использовать git push для загрузки новых изменений для experimental ветки проекта kernel/common , размещенной на сервере git.example.com Gerrit:

 git push ssh://john.doe@git.example.com:29418/kernel/common HEAD:refs/for/experimental
  

Каждый новый коммит, загруженный клиентом git push, будет преобразован в запись изменения на сервере.
Удаленный ref refs/for/experimental фактически не создается Gerrit, хотя сообщения о состоянии клиента могут указывать на обратное.


Технически это управляется cmd-receive-pack .

Вызывается ‘git push’ и обновляет репозиторий проекта информацией, поступающей с конца ‘git push’.

Он реализован gerrit/sshd/commands/Receive.java , который получает загрузку изменений по SSH с использованием протокола Git receive-pack.