Git push over http(使用git-http-backend)和Apache不起作用

我拼命地试图通过使用git-http-backend的“智能-http”模式推动git工作。 然而经过几个小时的testing和故障排除之后,我依然留下了

error: Cannot access URL http://localhost/git/hello.git/, return code 22 fatal: git-http-push failed` 

我正在使用最新版本的Ubuntu(12.04),Apache2(2.2.22)和Git(1.7.9.5),并遵循互联网上的不同教程,就像这个http://www.parallelsymmetry.com/howto/git .jsp 。

我的VHost文件目前看起来像这样:

 <VirtualHost *:80> SetEnv GIT_PROJECT_ROOT /var/www/git SetEnv GIT_HTTP_EXPORT_ALL SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER DocumentRoot /var/www/git ScriptAliasMatch \ "(?x)^/(.*?)\.git/(HEAD | \ info/refs | \ objects/info/[^/]+ | \ git-(upload|receive)-pack)$" \ /usr/lib/git-core/git-http-backend/$1/$2 <Directory /var/www/git> Options +ExecCGI +SymLinksIfOwnerMatch -MultiViews AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost> 

我已经将/var/www/git文件夹的所有权更改为root.www-data和我的testing库我已经通过执行git config http.receivepack true启用匿名推送。 我也尝试与authentication用户,但具有相同的结果。

存储库是使用以下sudo git init --bare --shared [repo-name]创build的: sudo git init --bare --shared [repo-name]

在看apache2 access.log的时候,在我看来,WebDAV正在尝试使用,而且这个git-http-backend永远不会被触发:

 127.0.0.1 - - [20/May/2012:23:04:53 +0200] "GET /git/hello.git/info/refs?service=git-receive-pack HTTP/1.1" 200 207 "-" "git/1.7.9.5" 127.0.0.1 - - [20/May/2012:23:04:53 +0200] "GET /git/hello.git/HEAD HTTP/1.1" 200 232 "-" "git/1.7.9.5" 127.0.0.1 - - [20/May/2012:23:04:53 +0200] "PROPFIND /git/hello.git/ HTTP/1.1" 405 563 "-" "git/1.7.9.5" 

我究竟做错了什么? 可能是我使用的git和/或apache版本的问题?

顺便说一句:我已经阅读了有关ServerFault和StackOverflow的所有git http相关的问题,并没有提供给我一个解决scheme,所以请不要标记为重复。

我认为WebDAV正在被使用的事实意味着你的CGI的东西没有正确configuration。

尝试使用ScriptAlias指令的方式显示在您所说的跟随的教程中。

 ScriptAlias /git /usr/lib/git-core/git-http-backend 

要解决这个问题,我们需要使用2个步骤在Apache服务器上启用WebDav

  1. 在apache的vhost文件中启用
 SetEnv GIT_PROJECT_ROOT /var/www/git SetEnv GIT_HTTP_EXPORT_ALL SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER DocumentRoot /var/www/git <Directory /var/www/git> Options +ExecCGI +SymLinksIfOwnerMatch -MultiViews AllowOverride None Order allow,deny allow from all Dav On </Directory> 

  1. 在命令提示符下运行此命令

    a2enmod dav_fs

  2. 然后重新启动Apache服务器。