【问题标题】:Apache and git-http-backendApache 和 git-http-backend
【发布时间】:2023-03-30 23:14:01
【问题描述】:

我目前正在使用 Apache 2.4.7 的 Ubuntu LTS 14.04 机器上设置一些 git 存储库。

这是 apache 配置:

SetEnv GIT_PROJECT_ROOT /var/www/html/git
SetEnv GIT_HTTP_EXPORT_ALL 1
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER
ScriptAliasMatch \
    "(?x)^/git/(.*/(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                                                                                                                   

<Location /git/oswald.git>
 Options +ExecCGI
 AuthType Basic
 DAV on
 AuthName "Git"
 AuthUserFile /etc/apache2/git_paragon_passwd
 Require valid-user

    Order allow,deny
    Allow from all
</Location>

测试存储库位于/var/www/html/git/oswald.git 下。在存储库中,我设置了配置属性

http.receivepack=true

文件git-daemon-export-ok 存在。

如果我现在尝试克隆:

git clone https://server/git/oswald.git

认证后我得到:

fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?

(git 2.1.0 客户端,在服务器 git 1.9.1 上)。

我尝试了几件事,所以如果我不使用 git-http-backend 并通过 WebDAV 我可以克隆但不能推送,使用 git-http-backend 我什至无法克隆。

如果我将ScriptAliasMatch 的最后一行从

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

/usr/lib/git-core/git-http-backend/$1

man page of git-http-backend 中所述,我明白了

fatal: repository 'https://server/git/oswald.git/' not found

来自 Apache 的 error.log:

AH00130: File does not exist: /usr/lib/git-core/git-http-backend/oswald.git/info/refs

有人知道出了什么问题吗?我已经花了很多时间浏览论坛,但到目前为止没有任何建议有帮助。

【问题讨论】:

    标签: git apache git-http-backend


    【解决方案1】:

    是否启用了 Apache 的 CGI 模块?尝试运行sudo a2enmod cgi,然后重新启动 Apache。

    我遇到了完全相同的问题,最终是由于 CGI 模块被禁用而引起的。在我的例子中,上面的命令选择并启用了“cgid”模块。

    如果您使用的是ScriptAliasMatch,我相信您需要尾部的$1,但如果您使用的是ScriptAlias,则应该省略$1(但保留尾部的斜杠)。

    您可能还需要添加一个看起来像这样的Directory 块:

    <Directory "/usr/lib/git-core">
        Options +ExecCgi -MultiViews +SymLinksIfOwnerMatch
        AllowOverride none
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
    

    【讨论】:

    • 不客气!昨天我花了很长时间尝试进行设置,并在研究时遇到了您的问题。 :)
    • 谢谢,我在这件事上浪费了几个小时。在 Apache 2.4 中,我不得不将授权指令更改为新语法:“要求所有已授予”并使用“a2enmod cgi”启用 mod-cgi。
    • 但是这些配置必须附加在哪个文件中? apache2.conf 还是 httpd.conf?
    • @nix86 这很好地回答了您关于使用哪个配置文件的问题:superuser.com/a/676330/64392
    【解决方案2】:

    对于遇到此特定错误的类似问题的其他人:

    fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?
    

    我最终在 CentOS 6.5 上找到了导致此问题的原因:SELinux。尝试运行以下命令:

    setenforce 0
    

    如果这样可以解决您的问题,那么您的 ACL 存在权限问题。当然,通过运行上述命令,您已经关闭了一系列权限检查,但它至少可以告诉您这是否是导致您的问题的原因。如需更多信息,请查看文档here

    通过运行重新打开检查

    setenforce 1
    

    【讨论】:

      【解决方案3】:

      不知道你有没有解决,看我的回答here

      我有几个想法:

      • 根据我的经验,使用 https 访问存储库失败,而 http 工作正常。

      • 您没有提到更改 repo 目录所有者以匹配 apache 用户,您这样做了吗?

      • 您是否确认 git-http-backend 脚本位于您期望的位置?

      【讨论】:

      • 它没有用,但是结合 segfault 和你的答案,我能够让它运行。不幸的是,我只能将一个答案标记为解决方案,我会给出两个答案。谢谢!
      • 别担心。如果您发现我指导您的答案中缺少某些内容,您可以添加缺少的信息。
      【解决方案4】:

      添加这个:

      <Directory /usr/lib/git-core>
        Require all granted
      </Directory>
      

      【讨论】:

        猜你喜欢
        • 2017-04-16
        • 2014-10-02
        • 2018-09-30
        • 1970-01-01
        • 2020-09-15
        • 1970-01-01
        • 1970-01-01
        • 2018-07-06
        • 1970-01-01
        相关资源
        最近更新 更多