Git 通过 http 推送(使用 git-http-backend)但 Apache 不起作用

Git 通过 http 推送(使用 git-http-backend)但 Apache 不起作用

我一直在努力尝试使用 git-http-backend 通过“智能 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),并遵循了在互联网上找到的不同教程,比如这个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/gitroot.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 相关的问题,但没有一个为我提供解决方案,所以请不要将其标记为重复。

答案1

我认为 WebDAV 的使用意味着您的 CGI 内容配置不正确。

尝试按照您所说的正在遵循的教程中显示的方式使用 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 服务器。

相关内容