Git wypycha http (używając backendu git-http) i Apache nie działa

11

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/gitfolderu na root.www-datai 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.

Nils Magne Lunde
źródło
Mam dokładnie ten sam problem, czy masz jakieś rozwiązanie?
Rishi Kulshreshtha
@RishiKulshreshtha: Przepraszamy, nie znalazłem żadnego rozwiązania. Zamiast tego przeszedłem na GitHub ... To powiedziawszy, że nie wypróbowałem rozwiązania Deepiki. Jeśli ktoś może sprawdzić, czy to działa, zaakceptuję tę odpowiedź.
Nils Magne Lunde,
Ok, wypróbowałem rozwiązanie Deepiki, ale bez powodzenia.
Nils Magne Lunde,
Nawet teraz wypróbowałem rozwiązanie Deepiki, które również nie zadziałało.
Rishi Kulshreshtha

Odpowiedzi:

1

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.

ScriptAlias /git /usr/lib/git-core/git-http-backend
Cristian Măgherușan-Stanciu
źródło
Cześć. Zacząłem od dyrektywy ScriptAlias, ale to nie działało.
Nils Magne Lunde
Mam ten sam problem. Znalazłeś rozwiązanie?
theV0ID,
@ theV0ID Nie, nigdy nie znalazłem rozwiązania. Używanie GitHub teraz zamiast lokalnego serwera Git.
Nils Magne Lunde
0

Aby to naprawić, musimy włączyć WebDav na serwerze Apache, wykonując 2 kroki

  1. włącz w pliku vhost apache

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>

  1. Uruchom to polecenie w wierszu polecenia

    a2enmod dav_fs

  2. Następnie zrestartuj serwer Apache.

Deepika Srimanthula
źródło