Как Геррит реализует свои "волшебные" ссылки?

В настоящее время я внедряю Gerrit в качестве центральной системы проверки кода. Пытаясь понять все тонкости Геррита, я застрял в предложении ниже. Взято из документации Gerrit:

Поскольку Gerrit реализует весь стек серверов SSH и Git в своем собственном пространстве процессов, Gerrit сохраняет полный контроль над тем, как обновляется хранилище, и какие ответы отправляются git push клиент вызывается конечным пользователем или repo upload, Это позволяет Герриту предоставлять магические ссылки, такие как refs/for/* для подачи нового изменения и refs/changes/* для замены замены.

Что означает приведенное выше утверждение, в частности это предложение: "Как Gerrit реализует весь стек SSH и Git-сервера в своем собственном пространстве процессов"? Я попытался найти релевантные вопросы, но самое близкое, что я нашел, - это почему git push gerrit HEAD:refs/for/master используется вместо git push origin origin, но он не дает адекватного объяснения того, как реализовать стек сервера позволяет Герриту предоставлять магические ссылки. Извиняюсь, если подобные вопросы действительно задавались ранее. Спасибо!

1 ответ

Решение

Нетрудно реализовать магический реф даже в "обычном мерзавце". Вы просто должны реализовать pre-receive или же update подключите свой удаленный репозиторий, который распознает целевую ветвь push-сообщения и делает с ним все, что хочет (например, сохраняет push-запрос в другой ветви).

Хотя у меня нет никаких деталей реализации (я полагаю, это намного сложнее), это то же поведение, что и у Геррита. Вы нажимаете на refs/for/master и он хранит его в refs/changes/66/5066/2 филиал (например).

Есть несколько примеров.

Другие вопросы по тегам