Apache и Git-http-бэкэнд

в настоящее время я настраиваю некоторые репозитории git на машине Ubuntu LTS 14.04 с Apache 2.4.7.

это конфигурация 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. В репозитории я установил свойство config

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

to

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

как говорится в man-страница git-http-backend, я

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

с ошибкой.вход из Apache:

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

кто-нибудь знает, что это неправильно? Я уже потратил много времени, проходя через форумы, но никакие предложения там не помогли до сих пор.

4 ответов


включен ли модуль CGI Apache? Попробуйте запустить sudo a2enmod cgi а затем перезапуск Apache.

у меня была точно такая же проблема, которая была вызвана тем, что CGI-модуль был отключен. В моем случае вышеуказанная команда выбрала и включила модуль "cgid".

Я считаю, что вам нужен трейлинг Если вы используете ScriptAliasMatch, но не следует указывать (но держите косую черту), если вы используете ScriptAlias.

вам также может потребоваться добавить Directory блок, который выглядит примерно так:

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

для других людей, сталкивающихся с аналогичными проблемами с этой конкретной ошибкой:

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

В конце концов я нашел, что вызвало эту проблему для меня на CentOS 6.5: SELinux. Попробуйте выполнить следующую команду:

setenforce 0

Если это исправляет вашу проблему, то у вас есть проблема с разрешениями ACLs. Конечно, выполнив вышеуказанную команду, вы отключили целый ряд проверок разрешений, но она может по крайней мере сказать вам, является ли это причиной вашей проблемы. Для более подробная информация, ознакомьтесь с документацией здесь.

включите проверки, запустив

setenforce 1

Я не знаю, решили ли вы его еще, но взгляните на мой ответ здесь

У меня есть пара идей:

  • по моему опыту доступ к репозиторию с https не удался, в то время как http работал.

  • вы не упоминаете об изменении владельца каталога РЕПО в соответствии с пользователем apache, вы это сделали?

  • вы подтвердили, что скрипт git-http-backend находится там, где вы его ожидаете быть?


добавить это:

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