Git推送HTTP(使用git-http-backend),Apache无法正常工作


11

我一直在拼命尝试使用git-http-backend通过“ smart-http”模式推动git工作。但是,经过数小时的测试和故障排除后,我仍然

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)的最新版本,并遵循了Internet上的各种教程,例如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并为我的测试存储库启用了匿名推送git config http.receivepack true。我也尝试过通过身份验证的用户,但结果相同。

使用以下方式创建存储库: 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相关的问题,它们都没有为我提供解决方案,因此请不要将其标记为重复。


我正面临着完全相同的问题,您有任何解决方案吗?
Rishi Kulshreshtha 2015年

@RishiKulshreshtha:对不起,没有找到任何解决方案。而是转到GitHub ...那表示我还没有尝试过Deepika的解决方案。如果有人可以验证它是否有效,我将接受该答案。
Nils Magne Lunde

好的,尝试了Deepika的解决方案,但没有成功。
尼尔斯·马格纳·隆德2015年

甚至我刚才也尝试了Deepika的解决方案,但对我也不起作用。
Rishi Kulshreshtha 2015年

Answers:


1

我认为WebDAV被使用的事实意味着您的CGI东西配置不正确。

尝试使用ScriptAlias指令,就像他们在您说的遵循的教程中显示指令一样。

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

你好 我开始使用ScriptAlias指令,但是没有用。
Nils Magne Lunde'5

这里同样的问题。您找到解决方案了吗?
theV0ID 2014年

@ theV0ID不,我从未找到解决方案。现在使用GitHub而不是本地Git服务器。
Nils Magne Lunde 2014年

0

要解决此问题,我们需要使用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服务器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.