Назад | Перейти на главную страницу

Аутентификация для git push через http

Я настроил apache для использования git-http-backend в соответствии с инструкциями в книге pro git и ее справочной странице. Моя конфигурация apache теперь выглядит так:

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
Require group committers
</LocationMatch>

Я могу клонировать репо, используя git clone http: //user@url/git/repo.git
который запрашивает у меня пароль для «пользователя», а затем продолжает. Однако, когда я пытаюсь нажать, мне дважды предлагается ввести пароль, а затем появляется сообщение об ошибке:

Cannot access URL http: //user@url/git/repo.git/, return code 22

(Я вставил пробел в URL-адреса, потому что механизм предотвращения спама не позволит мне публиковать в противном случае)

Когда я смотрю свой журнал apache, я вижу:
192.168.1.151 - - [12/Sep/2010:20:11:22 +0100] "GET /git/repo.git/info/refs?service=git-receive-pack HTTP/1.1" 403 - "-" "git/1.7.2.3"
192.168.1.151 - - [12/Sep/2010:20:11:23 +0100] "GET /git/repo.git/info/refs HTTP/1.1" 200 59 "-" "git/1.7.2.3"
192.168.1.151 - - [12/Sep/2010:20:11:23 +0100] "GET /git/repo.git/HEAD HTTP/1.1" 200 23 "-" "git/1.7.2.3"
192.168.1.151 - - [12/Sep/2010:20:11:26 +0100] "PROPFIND /git/repo.git/ HTTP/1.1" 404 - "-" "git/1.7.2.3"

Я добавил «пользователя» в группу «коммиттеры» на сервере (казалось, что проще всего просто следовать инструкциям), и мой локальный .netrc (chmodded 600) выглядит так:

machine address
login user
password pass

Каждая найденная мной инструкция кажется немного неясной относительно того, нужно ли мне включать DAV для рассматриваемого каталога (хотя я думал, что это был старый способ сделать это). я мог просто используйте гитолит, но сначала я хотел бы разобраться в этом ...

Важной вещью в вашем журнале apache является следующая строка:

  192.168.1.151 - - [12/Sep/2010:20:11:22 +0100] "GET /git/repo.git/info/refs?service=git-receive-pack HTTP/1.1" 403 - "-" "git/1.7.2.3"

git-http-backend возвращает код 403 / Forbidden, когда клиент просит использовать метод git-receive-pack. Затем он возвращается к WebDAV, но использование WebDAV - это не нужно.

У меня такая же проблема; в моем случае это произошло из-за того, что REMOTE_USER не был установлен. В моем случае REDIRECT_REMOTE_USER / был / установлен, поэтому я установил для REMOTE_USER значение REDIRECT_REMOTE_USER, что решило проблему.

Я задокументировал свою настройку на своем блог - и посмотрите, работает ли это для вас.

PROPFIND - это нестандартный HTTP-метод webdav.
Вам нужно будет включить webdav для расположения вашего репозитория. Включите mod_dav в httpd.conf и добавьте это в свой блок vhost LocationMatch:

<LocationMatch "^/git/.*/git-receive-pack$">
  #...
  Dav on
</LocationMatch>

Затем убедитесь, что у вашего пользователя Apache есть доступ для записи в ваш репозиторий.