Apache和git-http-backend

Mic*_*elO 8 apache git 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>
Run Code Online (Sandbox Code Playgroud)

测试存储库在/var/www/html/git/oswald.git.在存储库中,我设置了config属性

http.receivepack=true
Run Code Online (Sandbox Code Playgroud)

该文件git-daemon-export-ok存在.

如果我现在尝试克隆:

git clone https://server/git/oswald.git
Run Code Online (Sandbox Code Playgroud)

认证后,我得到:

fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?
Run Code Online (Sandbox Code Playgroud)

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

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

如果我改变的最后一行ScriptAliasMatch

/usr/lib/git-core/git-http-backend
Run Code Online (Sandbox Code Playgroud)

/usr/lib/git-core/git-http-backend/$1
Run Code Online (Sandbox Code Playgroud)

正如git-http-backend手册页中所述,我明白了

fatal: repository 'https://server/git/oswald.git/' not found
Run Code Online (Sandbox Code Playgroud)

使用Apache的error.log:

AH00130: File does not exist: /usr/lib/git-core/git-http-backend/oswald.git/info/refs
Run Code Online (Sandbox Code Playgroud)

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

seg*_*ult 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>
Run Code Online (Sandbox Code Playgroud)