Ответ 1
Документация Gerrit, в частности раздел "Push changes" , объясняет, что вы нажимаете на "магический refs/for/'branch'
ref, используя любые Git клиентский инструмент".
Следующее изображение взято из Intro to Gerrit. Когда вы нажимаете на Gerrit, вы делаете git push gerrit HEAD:refs/for/<BRANCH>
. Это подталкивает ваши изменения к промежуточной области (на диаграмме "Ожидающие изменения" ). На самом деле у Gerrit нет ветки под названием <BRANCH>
; он лежит на клиенте Git.
Внутри Gerrit имеет собственную реализацию для стеков Git и SSH. Это позволяет ему предоставлять "магические" refs/for/<BRANCH>
refs.
При получении запроса push для создания ссылки в одном из этих пространств имен Gerrit выполняет свою собственную логику для обновления базы данных и затем передает клиенту результат операции. Успешный результат заставляет клиента поверить, что Gerrit создал ref, но на самом деле Gerrit не создал ref вообще. [Ссылка - Gerrit, "Подробные сведения" ].
После успешного патча (т.е. патч был перенесен в Gerrit, [помещенный в промежуточную область "Ожидающие изменения" ], просмотренный, и обзор прошел), Gerrit отталкивает изменение от "Ожидающих изменений", в "Авторитетный репозиторий", вычисляя, какая ветвь должна вставлять его, основываясь на магии, которую она сделала, когда вы нажали на refs/for/<BRANCH>
. Таким образом, успешно рассмотренные патчи можно вытащить непосредственно из правильных ветвей Authoritative Repository
.