Я хотел бы предложить доступ только для чтения к моим репозиториям GIT для всех (т.е. имя пользователя и пароль не требуются), но требовать аутентификации для записи. В git-http-backend
страница руководства предполагает, что это возможно путем сопоставления с местоположением ^/git/.*/git-receive-pack$
. Для Apache 2.x это будет выглядеть так:
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
Require group committers
...
</LocationMatch>
Сейчас я использую lighttpd, но перевод приведенного выше не должен вызвать проблем. За исключением того, что мой журнал доступа предполагает, что все вышесказанное все равно не сработает. Это то, что я вижу, когда выполняю git push
:
192.168.1.84 tracsrv.local - [06/Apr/2013:20:00:20 +0200] "GET /git/foo.git/info/refs?service=git-receive-pack HTTP/1.1" 403 5 "-" "git/1.8.2"
Похоже, мне нужно сопоставить строку запроса. Для легкого я пробовал это:
$HTTP["querystring"] =~ "service=git-receive-pack" {
$HTTP["url"] =~ "^/git" {
cgi.assign = ( "" => "" )
setenv.add-environment = (
"GIT_PROJECT_ROOT" => "/srv/git",
"GIT_HTTP_EXPORT_ALL" => ""
)
auth.backend = "plain"
auth.backend.plain.userfile = "/srv/tracprjs/trac.plain"
auth.require = (
"/" => (
"method" => "basic",
"realm" => "trac",
"require" => "valid-user"
)
)
}
}
$HTTP["url"] =~ "^/git" {
cgi.assign = ( "" => "" )
setenv.add-environment = (
"GIT_PROJECT_ROOT" => "/srv/git",
"GIT_HTTP_EXPORT_ALL" => ""
)
}
Пароль не требуется для git fetch
и это требуется для git push
. Однако git push
на самом деле не удается. Любые указания о том, как этого добиться?
Я нашел рабочую конфигурацию с помощью людей из списка рассылки git: http://www.spinics.net/lists/git/msg203744.html