Я отчаянно пытался заставить git работать в режиме "smart-http" с помощью git-http-backend. Однако после многих часов тестирования и устранения неполадок я все еще остаюсь с
error: Cannot access URL http://localhost/git/hello.git/, return code 22
fatal: git-http-push failed`
Я использую последние версии Ubuntu (12.04), Apache2 (2.2.22) и Git (1.7.9.5) и следил за различными учебными пособиями, найденными в Интернете, например этим http://www.parallelsymmetry.com/howto/git.jsp.
Мой файл VHost в настоящее время выглядит так:
<VirtualHost *:80>
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
DocumentRoot /var/www/git
ScriptAliasMatch \
"(?x)^/(.*?)\.git/(HEAD | \
info/refs | \
objects/info/[^/]+ | \
git-(upload|receive)-pack)$" \
/usr/lib/git-core/git-http-backend/$1/$2
<Directory /var/www/git>
Options +ExecCGI +SymLinksIfOwnerMatch -MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Я сменил владельца /var/www/git
папку в root.www-data
и для моих тестовых репозиториев я включил анонимный push, выполнив git config http.receivepack true
. Я также пробовал с аутентифицированными пользователями, но с тем же результатом.
Репозитории были созданы с использованием: sudo git init --bare --shared [repo-name]
Глядя на apache2 access.log, мне кажется, что WebDAV пытается использовать, а git-http-backend никогда не запускается:
127.0.0.1 - - [20/May/2012:23:04:53 +0200] "GET /git/hello.git/info/refs?service=git-receive-pack HTTP/1.1" 200 207 "-" "git/1.7.9.5"
127.0.0.1 - - [20/May/2012:23:04:53 +0200] "GET /git/hello.git/HEAD HTTP/1.1" 200 232 "-" "git/1.7.9.5"
127.0.0.1 - - [20/May/2012:23:04:53 +0200] "PROPFIND /git/hello.git/ HTTP/1.1" 405 563 "-" "git/1.7.9.5"
Что я делаю не так? Возможно, это проблема с версией git и / или apache, которую я использую?
Кстати: я прочитал все вопросы, связанные с git http на ServerFault и StackOverflow, и ни один из них не предоставил мне решение, поэтому, пожалуйста, не помечайте это как дубликат.
Я думаю, что тот факт, что WebDAV используется, означает, что ваш CGI-материал настроен неправильно.
Попробуйте использовать директиву ScriptAlias так, как она показана в учебнике, за которым вы, по вашему мнению, следили.
ScriptAlias /git /usr/lib/git-core/git-http-backend
Чтобы исправить это, нам нужно включить WebDav на сервере apache, выполнив 2 шага
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
DocumentRoot /var/www/git
<Directory /var/www/git>
Options +ExecCGI +SymLinksIfOwnerMatch -MultiViews
AllowOverride None
Order allow,deny
allow from all
Dav On
</Directory>
Запустите эту команду в командной строке
a2enmod dav_fs
Затем перезапустите сервер Apache.