Может ли Gitosis обеспечить правильное имя пользователя/адрес электронной почты?

Gitosis может аутентифицировать пользователей на основе пары открытый/закрытый ключ. Он может узнать, какой пользователь в данный момент совершает коммит. Однако имя пользователя и адрес электронной почты берутся из конфигурации Git клиента («git config user.name» и т. д.), для которой можно задать произвольные значения. Есть ли способ связать имена пользователей и адреса электронной почты с их открытыми ключами, а затем заставить Gitosis использовать эти имена и адреса электронной почты в качестве имени и адреса электронной почты коммиттера?

Мне все равно, буду ли я использовать Gitosis, WebDAV или какую-либо другую альтернативу для совместного использования репозитория. Мне просто кажется, что ни один из доступных методов не поддерживает принудительное использование какого-то «правильного» имени пользователя и электронной почты. Если есть какая-то альтернатива, расскажите о ней.


person k21    schedule 17.04.2010    source источник


Ответы (2)


Пример update-paranoid в исходниках Git выполняет следующую проверку:

Для всех новых объектов-фиксаторов или тегов строка коммиттера (или тегера) внутри объекта должна точно совпадать с одним из значений user.committer, перечисленных в файле acl.

Думаю, можно настроить Gitosis или Gitolite, чтобы выполнить аналогичную проверку, или вы можете написать свой собственный хук upate или pre-receive. Во всех этих случаях отправка должна выполняться через интеллектуальный транспорт, который может использовать Git. Это означает отправку через SSH или через интеллектуальный HTTP (http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html); он исключает отправку через WebDAV (тупой HTTP(S)).

Обратите внимание, что нет смысла проверять авторство коммитов, так как они могут быть получены из патчей, отправленных по электронной почте (коммиттер должен их проверять перед применением), или в результате выбора вишни или перебазирования.

person Jakub Narębski    schedule 18.04.2010
comment
Спасибо за ваш ответ. Я, скорее всего, попробую git-http-backend. Проблема с использованием хуков с Gitosis заключалась в том, что он не устанавливал имя пользователя, вошедшего в систему (оно всегда было установлено на git) - person k21; 19.04.2010
comment
@ koumes21: Gitosis (и Gitolite) выполняет аутентификацию на основе используемого ключа SSH, поэтому он знает, какой пользователь получил доступ к репозиторию (вошел в систему), даже если он использует учетную запись оболочки «git». Gitolite предоставляет пользователю, вошедшему в систему, переменную окружения GL_USER; Я не знаю о Гитозе. - person Jakub Narębski; 19.04.2010

Обратите внимание, что вы не можете заставить сервер фактически устанавливать (перезаписывать) автора или коммиттера, потому что для этого он должен изменить полностью построенные объекты коммитов (и все коммиты, основанные на этом).

И это изменит хэш/идентификатор коммита. Поэтому их можно только отвергнуть. (Технически, конечно, вы можете создать новую фиксацию, но это вызовет всевозможные проблемы).

person eckes    schedule 13.04.2013