Как правильно заметил @duskwuff, это «волшебная» особенность Gerrit, и он достигает ее, фактически внедряя git-сервер (через jgit).
Однако, можно аппроксимировать его простым gitрепо и крючки.Чтобы сделать это чисто, нам нужны два крючка:
update
крючок: сделайте что-нибудь особенное, когда получите, включая создание новых ссылок post-receive
крючок: просто удалите созданный рефобновлением: git update-ref -d ${refname}
Вы можете сделать все в post-receive
хуке, если вам не нужна возможность возврата ошибки клиенту.
Хук post-receive
необходим, поскольку ссылка будет создана после успешного завершения сценария update
.
Она работает даже при одновременном нажатии двух пользователей.Хотя может быть короткое состояние гонки, хотя ссылка создана, но до того, как ловушка post-receive удалила ее, я никогда не сталкивался с этим, но я ожидаю, что это произойдет из моего поверхностного понимания того, как работает git.Так что это может быть неуместным решением, когда у вас большой пуш-трафик на эту магическую ссылку.
Я использую его для клонирования репозитория в сборке образа временного директора и порождения спавна.Я кодирую имя изображения, чтобы встроить имя ссылки.(Мне не нужно создавать реальный реф, как Геррит, но это было бы возможно)