10

我目前正在使用 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如果我更改from的最后一行

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

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

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

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

4

4 回答 4

12

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

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

我相信如果您使用 . 则需要尾随$1ScriptAliasMatch$1如果您使用ScriptAlias.

您可能还需要添加一个Directory如下所示的块:

<Directory "/usr/lib/git-core">
    Options +ExecCgi -MultiViews +SymLinksIfOwnerMatch
    AllowOverride none
    Order allow,deny
    Allow from all
    Require all granted
</Directory>
于 2014-11-05T17:29:43.557 回答
1

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

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

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

setenforce 0

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

通过运行重新打开检查

setenforce 1
于 2015-06-04T12:48:44.647 回答
0

我不知道你是否解决了它,但看看我的回答here

我有几个想法:

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

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

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

于 2014-11-04T14:39:33.067 回答
0

添加这个:

<Directory /usr/lib/git-core>
  Require all granted
</Directory>
于 2018-06-21T18:04:31.513 回答