我目前正在使用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
有人知道出了什么问题吗?我已经花了很多时间浏览论坛,但到目前为止没有任何建议有帮助。
答案 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