Git пост-получение через HTTP в OS X
Моя настройка:
1. OS X работает Apache сервер для хранения Git.
2. Мой каталог для проектов Git находится здесь: / Library / WebServer / Documents / CI
3. Я следовал этому руководству: http://www.pkgbox.org/wordpress/2011/08/setting-up-a-git-server-on-macos-x-lion/ и настроил доступ Git через HTTP
4. Мой gitrepo.conf похож на:
DavLockDB "/var/www/DavLock/Lock"
DavMinTimeout 28800
<Directory /Library/WebServer/Documents/CI>
DAV On
Deny from all
AuthType Basic
AuthName "Area51 git repositories"
AuthUserFile /etc/apache2/other/htpasswd-git
AuthGroupFile /etc/apache2/other/htgroup-git
</Directory>
<Directory /Library/WebServer/Documents/CI/ci_test.git>
Allow from all
Order allow,deny
Require valid-user
<Limit GET>
Require group myproject-reader
</Limit>
<Limit GET PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require group myproject-writer
</Limit>
</Directory>
5. Аутентификация по HTTP работает, у меня разные пользователи и разные группы, и все работает нормально.
Моя проблема: я хочу иметь возможность использовать хук post-receive в моем git. Я прочитал этот вопрос: перехват Git post-receive не работает. И оттуда я получаю то, что мне нужно настроить SMART HTTP. К сожалению, эта ссылка: http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html get's me 404.
Я прочитал здесь: http://progit.org/2010/03/04/smart-http.html но я новичок в настройке серверов и не понимаю, что мне делать... Не могли бы вы предоставить мне правильную конфигурацию для активации перехватчиков GIT?
Предлагаемое решение Изменение на SMART HTTP.
Вот мой текущий gitrepo.conf
<VirtualHost *:80>
ServerName ciserver.smt
DocumentRoot /Library/WebServer/Documents/CI
SetEnv GIT_PROJECT_ROOT /Library/WebServer/Documents/CI
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias / /usr/libexec/git-core/git-http-backend/
AliasMatch ^/(.*/objects/[0-9a-f]{2}/[0-9a-f]{38})$ /Library/WebServer/Documents/CI/$1
AliasMatch ^/(.*/objects/pack/pack-[0-9a-f]{40}.(pack|idx))$ /Library/WebServer/Documents/CI/$1
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))$" \
/usr/libexec/git-core/git-http-backend/$1
<LocationMatch "^/.*/git-receive-pack$">
AuthType Basic
AuthName "Git"
AuthUserFile /etc/apache2/other/htpasswd-git
AuthGroupFile /etc/apache2/other/htgroup-git
<Limit GET>
Require group myproject-reader
</Limit>
<Limit GET PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require group myproject-writer
</Limit>
</LocationMatch>
</VirtualHost>
Я изменил / etc / hosts, чтобы добавить ciserver.smt как указывающий на 127.0.0.1 Теперь я не могу сделать этот запрос:
git clone http://username@ciserver.smt/ci_test.git
Я собираюсь:
error: The requested URL returned error: 403 while accessing http://username@ciserver.smt/ci_test.git/info/refs
fatal: HTTP request failed
Что я до сих пор делаю не так?
1 ответ
Похоже, что вы не можете запускать хуки для общего репозитория webdav. Но вы можете использовать интеллектуальный протокол HTTP (который включен в веб-сервер через CGI), который обрабатывает хуки.
См. http://dev.bazingaweb.fr/2011/02/23/how-to-set-up-git-over-http.html для получения дополнительной информации.