git push over http身份validation

我已经设置了Apache使用git-http-backend按照专业版书籍中的说明和它的手册页。 我的apacheconfiguration现在看起来像:

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
Require group committers
</LocationMatch>

我可以使用git clone http: //user@url/git/repo.git克隆一个回购
这会提示我input“user”的密码,然后继续。 但是,当我尝试推送时,系统会提示input密码两次,然后出现错误:

Cannot access URL http: //user@url/git/repo.git/, return code 22

(我在URL中插入了一个空格,因为垃圾邮件防护机制不会让我发帖)

当我看着我的apache日志时,我看到:
192.168.1.151 - - [12/Sep/2010:20:11:22 +0100] "GET /git/repo.git/info/refs?service=git-receive-pack HTTP/1.1" 403 - "-" "git/1.7.2.3"
192.168.1.151 - - [12/Sep/2010:20:11:23 +0100] "GET /git/repo.git/info/refs HTTP/1.1" 200 59 "-" "git/1.7.2.3"
192.168.1.151 - - [12/Sep/2010:20:11:23 +0100] "GET /git/repo.git/HEAD HTTP/1.1" 200 23 "-" "git/1.7.2.3"
192.168.1.151 - - [12/Sep/2010:20:11:26 +0100] "PROPFIND /git/repo.git/ HTTP/1.1" 404 - "-" "git/1.7.2.3"

我已经添加了“用户”到服务器上的“提交者”组(似乎最简单的只是按照说明),我的本地.netrc(chmodded 600)如下所示:

machine address
login user
password pass

我发现的每条指令似乎都不清楚,是否必须为相关目录启用DAV(尽pipe如此,我认为这是旧的方法)。 我可以只使用gitolite,但我想先到这个底部

PROPFIND是一种非标准的webdav HTTP方法。
您需要启用webdav来获取存储库的位置。 在httpd.conf中启用mod_dav并将其添加到您的虚拟主机LocationMatch块:

 <LocationMatch "^/git/.*/git-receive-pack$"> #... Dav on </LocationMatch> 

然后确保你的Apache用户有权写入你的仓库。

你的apache日志中的重要事情是以下行:

  192.168.1.151 - - [12/Sep/2010:20:11:22 +0100] "GET /git/repo.git/info/refs?service=git-receive-pack HTTP/1.1" 403 - "-" "git/1.7.2.3" 

当客户端要求使用git-receive-pack方法时,git-http-backend返回403 / Forbidden代码。 然后它回落到WebDAV,但使用WebDAV是没有必要的

我有同样的问题; 在我的情况下这是由于没有设置REMOTE_USER。 在我的情况下,REDIRECT_REMOTE_USER / was / set,所以我把REMOTE_USER设置为REDIRECT_REMOTE_USER,解决了这个问题。

我在自己的博客上logging了我的设置 – 看看是否适合您。