Apache и git-http-backend
В настоящее время я настраиваю некоторые репозитории 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, я могу клонировать, но не push, с git-http-backend я не могу даже клонировать.
Если я изменю последнюю строку ScriptAliasMatch
от
/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
с ошибкой.log от Apache:
AH00130: File does not exist: /usr/lib/git-core/git-http-backend/oswald.git/info/refs
У кого-нибудь есть идея, что не так? Я уже потратил много времени, просматривая форумы, но пока что никакие предложения не помогли.
4 ответа
Модуль 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>
Для других людей, сталкивающихся с подобными проблемами с этой определенной ошибкой:
fatal: https://server/git/oswald.git/info/refs not valid: is this a git repository?
В конце концов я обнаружил, что стало причиной этой проблемы для меня на CentOS 6.5: SELinux. Попробуйте выполнить следующую команду:
setenforce 0
Если это решает вашу проблему, то у вас есть проблема с разрешениями ACL. Конечно, выполнив вышеуказанную команду, вы отключили целый ряд проверок разрешений, но он может по крайней мере сказать вам, является ли это причиной вашей проблемы. Для получения дополнительной информации ознакомьтесь с документацией здесь.
Включите чеки обратно, запустив
setenforce 1
Я не знаю, если вы уже решили, но посмотрите на мой ответ здесь
У меня есть пара идей:
По моему опыту доступ к хранилищу с помощью https не удался, в то время как http работал.
Вы не упоминаете об изменении владельца каталога репо в соответствии с пользователем apache, вы это сделали?
Вы подтвердили, что сценарий git-http-backend находится там, где вы ожидаете?
Добавь это:
<Directory /usr/lib/git-core>
Require all granted
</Directory>