Apache和git-http-backend

时间:2014-09-23 13:04:03

标签: git apache git-http-backend

我目前正在使用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

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

4 个答案:

答案 0 :(得分:10)

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

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

如果您使用$1,我认为您需要跟踪ScriptAliasMatch,但如果您使用$1,则应省略ScriptAlias(但保留尾随斜杠) }。

您可能还需要添加一个类似于此的Directory块:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我不知道你是否解决了这个问题,但请看看我的回答here

我有几个想法:

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

  • 您没有提及更改repo目录所有者以匹配apache用户,您是否已完成此操作?

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

答案 3 :(得分:0)

添加此内容:

0.1