git-http-后端
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7222992/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
git-http-backend
提问by Michael Pfeuti
I tried to set up a git server with git-http-backend and everything works pretty much as I want but there is one little thing.
我试图用 git-http-backend 设置一个 git 服务器,一切都按我的意愿工作,但有一件小事。
The config
配置
<VirtualHost *:80>
ServerName git.server.com
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
ScriptAlias /git /usr/lib/git-core/git-http-backend/
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
</Directory>
<LocationMatch "^/git/repos/git-receive-pack$">
AuthType Digest
AuthName "Git Repositories"
AuthUserFile /srv/git/.git-auth-file
AuthGroupFile /srv/git/.git-group-file
Require valid-user
</LocationMatch>
</VirtualHost>
This allows everybody to read the repos but only valid users to write. The thing that bugs me is that the url is http://git.server.com/git/repos. I would like to get rid of the gitin the URL like http://git.server.com/repos. When I change the config to
这允许每个人读取 repos,但只有有效用户才能写入。困扰我的是 url 是http://git.server.com/git/repos。我想摆脱URL中的git,如http://git.server.com/repos。当我将配置更改为
<VirtualHost *:80>
ServerName git.server.com
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
ScriptAlias / /usr/lib/git-core/git-http-backend/
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
</Directory>
<LocationMatch "^/repos/git-receive-pack$">
AuthType Digest
AuthName "Git Repositories"
AuthUserFile /srv/git/.git-auth-file
AuthGroupFile /srv/git/.git-group-file
Require valid-user
</LocationMatch>
</VirtualHost>
The authentication fails. I can still read the repos but git pushfails. I couldn't figure out why this happens.
认证失败。我仍然可以阅读 repos 但git push失败。我无法弄清楚为什么会发生这种情况。
* About to connect() to git.server.com port 80 (#0)
* Trying MYIP... * Connected to git.server.com (MYIP) port 80 (#0)
> GET /iocaste/info/refs?service=git-receive-pack HTTP/1.1
User-Agent: git/1.7.6
Host: git.server.com
Accept: */*
Pragma: no-cache
< HTTP/1.1 200 OK
< Date: Sun, 28 Aug 2011 18:17:27 GMT
< Server: Apache/2.2.19 (Unix) mod_ssl/2.2.19 OpenSSL/1.0.0d DAV/2 PHP/5.3.8 with Suhosin-Patch SVN/1.6.17
< Expires: Fri, 01 Jan 1980 00:00:00 GMT
< Pragma: no-cache
< Cache-Control: no-cache, max-age=0, must-revalidate
< Transfer-Encoding: chunked
< Content-Type: application/x-git-receive-pack-advertisement
<
* Connection #0 to host git.server.com left intact
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 257 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
* About to connect() to git.server.com port 80 (#0)
* Trying MYIP... * connected
* Connected to git.server.com (MYIP) port 80 (#0)
> POST /iocaste/git-receive-pack HTTP/1.1
User-Agent: git/1.7.6
Host: git.server.com
Accept-Encoding: deflate, gzip
Content-Type: application/x-git-receive-pack-request
Accept: application/x-git-receive-pack-result
Content-Length: 393
* The requested URL returned error: 404
* Closing connection #0
error: RPC failed; result=22, HTTP code = 404
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Can someone help me understand why the latter fails? I assume it must be that the ScriptAlias kicks in during the authentication.
有人可以帮助我理解为什么后者会失败吗?我认为必须是 ScriptAlias 在身份验证期间启动。
EDIT 1The logging of apache didn't give me much information. Just that the authentication fail for some reason.
编辑 1apache 的日志记录没有给我太多信息。只是由于某种原因身份验证失败。
The access_log says:
access_log 说:
MYIP - - [29/Aug/2011:19:03:18 +0200] "GET /repos/info/refs?service=git-receive-pack HTTP/1.1" 200 153
MYIP - - [29/Aug/2011:19:03:18 +0200] "POST /repos/git-receive-pack HTTP/1.1" 404 -
and the error_log says:
和 error_log 说:
[Mon Aug 29 19:03:18 2011] [error] [client MYIP] Request not supported: '/srv/git/error/HTTP_UNAUTHORIZED.html.var'
回答by Jon
I don't have a 100% sure fire answer, but check out my question about GIT here, Setting up Git Server on Windows With git-http-backend.exe.
我没有 100% 确定的答案,但请在此处查看我关于 GIT 的问题,使用 git-http-backend.exe 在 Windows 上设置 Git 服务器。
My locationMatch is slightly different, but not by much:
我的 locationMatch 略有不同,但差别不大:
<LocationMatch "^/repositories/.*/git-upload-pack$">
Options +ExecCGI
AuthType Basic
AuthName intranet
AuthUserFile "C:/GIT/Apache/config/users"
AuthGroupFile "C:/GIT/Apache/config/groups"
Require group committers
</LocationMatch>
The url I would use would be myserver.com/repositories/mytest.git
我会使用的网址是 myserver.com/repositories/mytest.git
Hope this helps.
希望这可以帮助。
回答by Thach Mai
Try changing
尝试改变
ScriptAlias / /usr/lib/git-core/git-http-backend/
to a more intelligent match that only directs git requests to git-http-backend:
到一个更智能的匹配,只将 git 请求定向到 git-http-backend:
ScriptAliasMatch \
"(?x)^/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/usr/lib/git-core/git-http-backend/