Desperacko próbuję nakłonić git do pracy w trybie „smart-http” za pomocą backendu git-http. Jednak po wielu godzinach testowania i rozwiązywania problemów nadal mi pozostaje
error: Cannot access URL http://localhost/git/hello.git/, return code 22
fatal: git-http-push failed`
Korzystam z najnowszych wersji Ubuntu (12.04), Apache2 (2.2.22) i Git (1.7.9.5) i wykonałem różne samouczki znalezione w Internecie, takie jak ten http://www.parallelsymmetry.com/howto/git .jsp .
Mój plik VHost wygląda obecnie tak:
<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>
Zmieniłem własność /var/www/git
folderu na root.www-data
i dla moich testowych repozytoriów włączyłem anonimowe wypychanie git config http.receivepack true
. Próbowałem również z uwierzytelnionymi użytkownikami, ale z tym samym rezultatem.
Repozytoria zostały utworzone przy użyciu:
sudo git init --bare --shared [repo-name]
Patrząc na apache2 access.log, wydaje mi się, że WebDAV próbuje zostać użyty i że backend git-http nigdy nie jest uruchamiany:
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"
Co ja robię źle? Czy to problem z wersją git i / lub apache, której używam, być może?
BTW: Przeczytałem wszystkie pytania związane z git http na ServerFault i StackOverflow i żadne z nich nie dostarczyło mi rozwiązania, więc proszę nie oznaczać tego jako duplikatu.
źródło
Odpowiedzi:
Myślę, że fakt korzystania z WebDAV oznacza, że twoje elementy CGI nie są poprawnie skonfigurowane.
Spróbuj użyć dyrektywy ScriptAlias w sposób, w jaki pokazują ją w samouczku, który powiedziałeś, że obserwujesz.
źródło
Aby to naprawić, musimy włączyć WebDav na serwerze Apache, wykonując 2 kroki
Uruchom to polecenie w wierszu polecenia
Następnie zrestartuj serwer Apache.
źródło