Ответы:
В документации для Gerrit, в частности в разделе «Push-изменения» , объясняется, что вы переходите к «магическому refs/for/'branch'
реф с использованием любого инструмента клиента Git».
Следующее изображение взято из вступления к Герриту . Когда вы нажимаете на Геррита, вы делаете git push gerrit HEAD:refs/for/<BRANCH>
. Это подталкивает ваши изменения в область подготовки (на диаграмме «Ожидающие изменения»). На самом деле у Геррита нет ответвления <BRANCH>
; это ложь клиенту git.
Внутри у Gerrit есть собственная реализация стеков Git и SSH. Это позволяет ему предоставлять «волшебные» refs/for/<BRANCH>
ссылки.
Когда получен push-запрос на создание ссылки в одном из этих пространств имен, Gerrit выполняет собственную логику для обновления базы данных, а затем лжет клиенту о результате операции. Успешный результат заставляет клиента верить, что Геррит создал ссылку, но в действительности Геррит вообще не создал ссылку. [ Ссылка - Геррит, "Песчаные детали" ].
После успешного исправления (т. Е. Исправление было передано Gerrit, [помещается в область подготовки «Pending Changes»], проверено и проверка пройдена) Gerrit помещает изменение из «Pending Changes» в « Авторитетный Repository», вычисление которой ветви толкать его в на основе магии он сделал , когда толкнул refs/for/<BRANCH>
. Таким образом, успешно проверенные патчи могут быть извлечены непосредственно из правильных ветвей Authoritative Repository
.
Чтобы избежать необходимости полностью указывать команду git push, вы можете изменить свой конфигурационный файл git:
[remote "gerrit"]
url = https://your.gerrit.repo:44444/repo
fetch = +refs/heads/master:refs/remotes/origin/master
push = refs/heads/master:refs/for/master
Теперь вы можете просто:
git fetch gerrit
git push gerrit
Это согласно Герриту
remote.origin.push
вместо того, чтобы печатать / вставлять его каждый раз!
git fetch
и git push
с конфигом @DavidDoria, упомянутым выше.