Для осуществления задуманного используем модуль dav от nginx:
... location ^~ /git/ { alias /srv/gitosis/repositories/; access_log /var/log/nginx/git.access.log combined; error_log /var/log/nginx/git.error.log; client_body_temp_path /tmp/nginx/git; create_full_put_path on; dav_access user:rw group:r all:r; dav_methods PUT DELETE MKCOL COPY MOVE; #PROPFIND } ...
Если необходимо предоставить доступ только для чтения, соответственно, убираем из dav_methods всё, что связано с записью, оставив только:
dav_methods COPY; #PROPFIND
Также можно добавить basic-авторизацию для управления доступом пользователей.
Для каждого экпортируемого репозитория необходимо добавить в крипт post-update (и выполнить вручную перед первым http-клонированием):
git-update-server-info
Иначе будет выдаваться сообщение об ошибке:
Initialized empty Git repository in ./test/.git/ fatal: http://host.domain.tdl/git/test.git/info/refs not found: did you run git update-server-info on the server?
Дискуссия