Настройка сервера Git в Windows с помощью git-http-backend.exe

Я занимаюсь настройкой сервера Git (1.7.2.3) на машине WS 2008 с использованием Apache и git-http-backend.exe. Я слежу за хорошим тут здесь . У меня работает графический интерфейс, я могу анонимно клонировать, и если я добавлю следующее в конфигурацию репозитория, я могу бессмысленно нажать:

[http]
 receivepack = true

Я добавил следующее в файл 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"


  Allow from all



        AuthType Basic
        AuthName "Git Access"
  AuthUserFile C:/GIT/ApacheConfig/users
  AuthGroupFile  C:/GIT/ApacheConfig/groups
        Require group repogeneral        

Когда я добавляю " LocationMatch "Я все еще могу клонировать произвольно или указав имя в URL-адресе,jon@myserver.com

Он запросит пароль и клон.

, но когда я пытаюсь вернуться в репо, я получаю следующее:

ошибка: не удается получить доступ к URL http: // jon@myserver.com /newtestrepo.git/, код возврата 22 фатальный: git-http-push failed

Я просматривал страницу руководства http-backend.exe для примеров, но не могу заставить их работать.

вот мой файл групп, ( это просто тестирование примеров, так что ничего, что можно было бы использовать в продукте):

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

вот файл пользователей:

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

Я знаю, что имя пользователя jon работает так, как если бы я поместил требования к каталогу в разделе gui, я могу войти с username jon, без проблем (указывает на те же файлы пользователя и группы, что и сопоставление местоположения).

Я не уверен, какую конфигурацию я пропустил на данном этапе (предполагая, что это проблема конфигурации).

Любой совет было бы здорово преодолеть это последнее препятствие.

РЕДАКТИРОВАТЬ

Я играл еще немного, и вот информация, которая у меня есть:

, если я клонирую репо с:

git clone http://jon@myserver.com/remotetest.git

, я могу получить репозиторий , но когда я пытаюсь ответить:

git push origin master

У меня спрашивают пароль, я ввожу его, затем он снова запрашивает его, а затем получаю следующую ошибку:

C: \ temp \ remotetest \ remotetest> git push origin мастер Пароль: Пароль: ошибка: не удается получить доступ к URL-адресу http: // jon@myserver.com /remotetest.git/, код возврата 22 фатальный: git-http-push failed

В моем журнале доступа Apache я получаю следующее:

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

Интересно, что когда я клонирую с именем пользователя в URL-адресе, не имеет значения, какой пароль я ввел, он все равно будет работать . Я предполагаю, что это потому, что я должен иметь возможность тянуть анонимно. Не уверен, почему он вообще запрашивает пароль в этот момент.

Я также вижу это в журнале ошибок:

[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

РЕДАКТИРОВАТЬ 2

Я попытался воссоздать файл паролей, выполнив:

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

, но этого не произошло » t help.

РЕДАКТИРОВАТЬ 3

конфигурацию PHP в httpd.conf, где он использует тот же файл пользователей для базовой аутентификации:


    AuthName "GitUsers"
    AuthType Basic
    AuthUserFile C:/GIT/ApacheConfig/users
AuthGroupFile  C:/GIT/ApacheConfig/groups

    require group webview

РЕДАКТИРОВАТЬ 4

ОК, поэтому я могу с радостью приступить к клонированию и нажатию в раздражающем режиме , но аутентификация не выполняется.

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

Я изменил httpd.conf, чтобы использовать следующее:


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

    
       Options Indexes FollowSymLinks MultiViews Includes ExecCGI
       AllowOverride None
       Order allow,deny
       Allow from all
    

    
        AuthType Basic
        AuthName "Git Access"
        AuthUserFile "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs/repositories/.htpasswd"
        Require valid-user
    
    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

Интересно, что когда я создавал новое репо (git init --bare newrepo.git), он не работал. t создать файл info / refs. Мне пришлось выполнить команду "git update-server-info", чтобы создать это.

В журналах доступа Apache есть кое-что интересное, что может быть ключом к разгадке:

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

Это когда я пытался «подтолкнуть» обратно к репо, но это команды GET, а не POST. не уверен, что такое PROPFIND, пока не нашел много информации об этом. Я думаю (читаю вокруг), может быть, происходит какое-то переписывание, которое меняет POST на GET и убивает его или что-то в этом роде. Но я пока не в себе.

Спасибо

22
задан hjpotter92 11 February 2017 в 02:35
поделиться