2010-09-28 8 views
20

Jestem w trakcie konfigurowania serwera Git (1.7.2.3) na maszynie WS 2008 przy użyciu Apache i git-http-backend.exe. Śledziłem dobry tutorial here. Mam pracę GUI, mogę annoymously klon i jeśli mogę umieścić następujące w config z repo mogę annoymously pchania:Konfigurowanie serwera Git w systemie Windows Za pomocą git-http-backend.exe

[http] 
receivepack = true 

Dodałem następujące do pliku httpd.conf:

SetEnv GIT_PROJECT_ROOT C:/GIT/Repositories 
SetEnv GIT_HTTP_EXPORT_ALL 
ScriptAliasMatch \ 
     "(?x)^/(.*/(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))$" \ 
        "C:/Program Files (x86)/git/libexec/git-core/git-http-backend.exe/$1" 

<Directory /> 
    Allow from all 
</Directory> 

<LocationMatch "^/git/.*/git-receive-pack$"> 
     AuthType Basic 
     AuthName "Git Access" 
    AuthUserFile C:/GIT/ApacheConfig/users 
    AuthGroupFile C:/GIT/ApacheConfig/groups 
     Require group repogeneral   
</LocationMatch> 

Kiedy dodać „LocationMatch” wciąż mogę sklonować annoymously lub podając nazwę w adresie URL, git clone http://[email protected]

będzie on poprosi o hasło i klonu.

ale gdy próbuję wcisnąć z powrotem do repo otrzymuję następujący:

błąd: nie można uzyskać dostępu do adresu URL http://[email protected]/newtestrepo.git/, kod zwrotny 22 krytyczny: git-http-Push powiodło

czekałem na przykład na http-backend.exe man page, ale nie może ich uruchomić.

tutaj jest złożyć moje grupy, (jest to tylko testowanie przykładów więc nic, które byłyby stosowane w prod):

admin: jon steve admin 
webview: jon steve web 
repogeneral: jon steve 
testrepo: jon admin 
testrepo2: jon steve web 

tutaj jest plik użytkownicy:

jon:$apr1$kEKVExYx$guIF9oYV8buGhFLZr16XN0 
steve:$apr1$jvgjF9nv$PvWsHH.cSOBN5ymk6NT1B0 
admin:$apr1$vzXgDskN$oszCei3tkHNUgtLj2HkHF/ 
web:$apr1$wS0do7hb$VA9tsc9c9LwY5PcjfhdwK0 

Wiem nazwa użytkownika jon działa tak, jakbym umieścił wymaganie katalogowe w sekcji gui Mogę się zalogować przy pomocy nazwy użytkownika jon bez problemu (punkty na tym samym pliku użytkownika i grupy, jak robi to lokalizacja).

Nie jestem pewien, jaką konfigurację pominąłem w tym momencie (zakładając, że jest to problem z konfiguracją).

Każda rada dotycząca pokonania tej ostatniej przeszkody byłaby fantastyczna.

EDIT

Gram trochę więcej, a tutaj jest informacja mam:

gdybym sklonować repo z:

git clone http://[email protected]/remotetest.git 

mogę repozytorium na zewnątrz, ale kiedy spróbuję i odepchnę z:

git push origin master

zostanę poproszony o hasło, to wprowadź je, a następnie prosi o nią ponownie, a następnie pojawia się następujący błąd:

C: \ temp \ remotetest \ remotetest> git Push głównego pochodzenie Hasło: Hasło : błąd: nie można uzyskać dostępu do adresu URL http://[email protected]/remotetest.git/, kod 22 powrócić krytyczny: git-http-Push udało

W moim dostępu Apache.log uzyskać następujące:

192.168.1.2 - - [29/Sep/2010:21:58:19 +0100] "GET /remotetest.git/info/refs?service=git-upload-pack HTTP/1.1" 200 38 
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/info/refs?service=git-receive-pack HTTP/1.1" 403 - 
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/info/refs HTTP/1.1" 200 - 
192.168.1.2 - - [29/Sep/2010:21:58:51 +0100] "GET /remotetest.git/HEAD HTTP/1.1" 200 23 

ciekawe kiedy sklonować z nazwą użytkownika w adresie URL nie ma znaczenia, co hasło umieścić w, nadal będzie ona działać. Zakładam, że to dlatego, że powinienem móc anonimowo działać. Nie wiem, dlaczego w tym momencie prosi o podanie hasła.

widzę też to w błąd kłody:

[Wed Sep 29 22:33:00 2010] [error] [client 192.168.1.2] client denied by server configuration: C:/Program Files (x86)/Git/libexec/git-core/git-http-backend.exe 
[Wed Sep 29 22:33:00 2010] [error] [client 192.168.1.2] client denied by server configuration: C:/Program Files (x86)/Git/libexec/git-core/git-http-backend.exe 

EDIT 2

Próbowałem odtworzenie pliku haseł, wykonując:

htpasswd -c -m C:/git/apacheconfig/users jon 

ale to nie pomogło .

EDIT 3

config PHP w httpd.conf gdzie wykorzystuje plik sami użytkownicy do podstawowej logowania:

<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs"> 
    AuthName "GitUsers" 
    AuthType Basic 
    AuthUserFile C:/GIT/ApacheConfig/users 
AuthGroupFile C:/GIT/ApacheConfig/groups 

    require group webview 
</Directory> 

EDIT 4

OK więc mogę dostać klonowanie i pchanie w trybie annoymous na szczęście, ale uwierzytelnianie nie powiedzie się.

C:\temp\test2\temp\test>git push origin master 
Password: 
Password: 
error: Cannot access URL http://[email protected]:8000/repositories/test.git/, return code 22 
fatal: git-http-push failed 

Zmieniłem httpd.conf aby użyć następujących:

<VirtualHost *:80> 
    SetEnv GIT_PROJECT_ROOT "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories" 
    SetEnv GIT_HTTP_EXPORT_ALL 

    <Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories"> 
     Options Indexes FollowSymLinks MultiViews Includes ExecCGI 
     AllowOverride None 
     Order allow,deny 
     Allow from all 
    </Directory> 

    <LocationMatch "^/repositories/.*/git-receive-pack$"> 
     AuthType Basic 
     AuthName "Git Access" 
     AuthUserFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories/.htpasswd" 
     Require valid-user 
    </LocationMatch> 
    ScriptAliasMatch \ 
      "(?x)^/repositories/(.*/(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))$" \ 
      "C:/Program Files (x86)/Git/libexec/git-core/git-http-backend/$1" 

    ErrorLog C:/GIT/error_log 
    CustomLog C:/GIT/access_log combined 
</VirtualHost> 

Co ciekawe, kiedy stworzył nowe repo (git startowych --bare newrepo.git) nie stworzyć informacji/plik ref. Musiałem wykonać polecenie "git update-server-info", aby je utworzyć.

logi Apache Access mają coś ciekawego, co mogłoby być wskazówką:

192.168.10.97 - - [05/Oct/2010:22:48:26 +0100] "GET /repositories/test.git/info/refs?service=git-receive-pack HTTP/1.1" 200 - 
192.168.10.97 - - [05/Oct/2010:22:48:26 +0100] "GET /repositories/test.git/HEAD HTTP/1.1" 200 23 
192.168.10.97 - - [05/Oct/2010:22:48:28 +0100] "PROPFIND /repositories/test.git/ HTTP/1.1" 405 248 

To jest, gdy starałem się „push” z powrotem do repo, ale są polecenia i nie GET POST. nie wiem, czym jest PROPFIND, nie znalazłem jeszcze wiele informacji na ten temat. Myślę (czytając), że może być coś w rodzaju przepisywania, które zmienia POST na GET i zabicie go, czy coś w tym stylu. W tej chwili jestem jednak nie na miejscu.

Dzięki

+0

Nie jestem pewien, dlaczego „' htdocs'”wchodzi na scenę w perspektywie' Directory'definition. – VonC

+0

to domyślna lokalizacja Apache do obsługi plików z. Używam PHP gui do wyświetlania repozytoriów, używa tego samego pliku authuser i daje popup login i działa z tą samą nazwą użytkownika i hasłem. użycie go jako testu, aby upewnić się, że Apache może zrozumieć plik haseł użytkowników. – Jon

+0

To pytanie powinno znajdować się na stronie http://serverfault.com/, ponieważ zajmuje się mniej programowaniem, a więcej konfiguracją i ustawianiem, nie? –

Odpowiedz

23

OK, więc piekło zamarzło i wreszcie udało mi się to zrobić!

Sądzę, że były dwie rzeczy, które były zasadniczo błędne w mojej konfiguracji.

1) Użytkownik nie wychodziła uwierzytelniania przepuszczone, znalazłem to pomogło:

SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER 

drugie nie mogłem dostać fizycznego „Directory” do pracy.

<Directory "C:/GIT/Apache/repositories"> 
Options +ExecCGI 
AuthType Basic 
AuthName intranet 
AuthUserFile "C:/GIT/Apache/config/users" 
Require valid-user 
</Directory> 

Aby rozwiązać ten problem, użyłem parametru LocationMatch zarówno do wyciągania, jak i wypychania. Oznacza to, że musisz się uwierzytelnić, aby pociągnąć i pchnąć.Jeśli chcesz ciągnąć w złym kierunku, możesz usunąć sekcję "git-upload-pack".

Mam nadzieję, że to pomoże komuś innemu.

Oto mój ostatni plik httpd.conf:

DocumentRoot "C:/GIT/Apache/www" 

<Directory /> 
Options +ExecCGI 
Allow from all 
</Directory> 

<Directory "C:/GIT/Apache/www"> 
    Allow from all 
</Directory> 

<Directory "C:/GIT/Apache/www/secure"> 
AuthType Basic 
AuthName intranet 
AuthUserFile "C:/GIT/Apache/config/users" 
require valid-user 
</Directory> 

SetEnv GIT_PROJECT_ROOT C:/GIT/Apache/repositories 
SetEnv GIT_HTTP_EXPORT_ALL 
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER 
ScriptAliasMatch \ 
    "(?x)^/(.*/(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))$" \ 
        "C:/Program Files/git/libexec/git-core/git-http-backend.exe/$1" 


<LocationMatch "^/.*/git-receive-pack$"> 
Options +ExecCGI 
AuthType Basic 
AuthName intranet 
AuthUserFile "C:/GIT/Apache/config/users" 
Require valid-user 
</LocationMatch> 

<LocationMatch "^/.*/git-upload-pack$"> 
Options +ExecCGI 
AuthType Basic 
AuthName intranet 
AuthUserFile "C:/GIT/Apache/config/users" 
Require valid-user 
</LocationMatch> 
+0

Doskonała opinia. Dziękuję Ci. +1 – VonC

+0

Cześć Jon, bardzo miła twoja praca. czy możesz mi pomóc zrozumieć, w jaki sposób zarządzałeś konfiguracją użytkowników, ponieważ wydaje się, że to nie był problem? – pollux1er

+0

@ pollux1er W końcu przeniosłem się na github. Używałem go tylko dla siebie, więc nie martwiłem się zbytnio o użytkowników. Nie pamiętam teraz zbyt wiele, przepraszam i GL. – Jon

Powiązane problemy