документация для Геррит, в частности, раздел "Push changes", объясняет, что вы нажимаете на «волшебную refs/for/'branch'
исх с помощью любого клиента инструмент Git».
следующее изображение взято из the 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 вообще. [Link - Gerrit, "Gritty Details"].

После успешного обновления (то есть, патч был нажат к Герриту, [положить его в «Pending Changes» промежуточная область], обзор и обзор прошло), Геррит толкает переход от «Ожидающих изменений» в «Авторитарный репозиторий», вычисляющий, какая ветвь должна вставить его в соответствии с магией, которую она сделала, когда вы нажали на refs/for/<BRANCH>
. Таким образом, успешно рассмотренные патчи можно вытащить непосредственно из правильных ветвей Authoritative Repository
.
Это прекрасный ответ. Спасибо :) – Shrayas
Из любопытства, что на самом деле происходит, если вы делаете что-то вроде «git push origin» только? Я пробовал и не вижу изменений нигде, поэтому вопрос. Но он действительно существует в моем местном журнале, естественно. –
@Pintolaranja Я сделал то же самое случайно. Вы правы, Геррит «обрабатывает» такую ситуацию, но не создает никаких изменений. Так что, на самом деле, он вообще не справляется с этим. Что действительно меня разозлило, потому что это действительно глупо. Почему разрешить пользователю что-то совершать, что Геррит не может правильно обработать? – trejder