[Обновление от 16.09.2010]
После просмотра этой прошлой ночи я понял, что мой первоначальный вопрос действительно задавал две разные вещи:
1) Можно ли установить хук после обновления для всех удаленных репозиториев, созданных с помощью gitosis (то есть не нужно вручную выполнять mv hooks/post-update.sample hooks/post-update
для после создания репозитория в gitosis) Это необходимо для клонирования через HTTP для работы ( тупые клиенты HTTP полагаются на тот факт, что git update-server-info
вызывается из хука после обновления).
2) Как только хранилище станет доступным по HTTP, можно ли включать и выключать доступ с помощью параметра в gitosis.conf (что-то похожее на daemon = no
или gitweb = yes
)
--- Решение вопроса 1 ---
Оказывается, Git использует шаблоны для создания новых репозиториев с помощью команды git init
. При выполнении mv hooks/post-update.sample hooks/post-update
в каталоге шаблонов все будущие вызовы git init
на моем сервере будут правильно сконфигурированы. (В OSX каталог шаблонов /opt/local/share/git-core/templates/
для тех, кто заботится)
Другим требованием для этого является включение правил перезаписи Apache, чтобы URL-адрес HTTP-клона для хранилища выглядел как http//git.example.com/repo.git
Мои правила перезаписи в /etc/apache2/extra/httpd-vhosts.conf
выглядят так:
# turning on mod rewrite
RewriteEngine on
# make the front page an internal rewrite to the gitweb script
RewriteRule ^/$ /cgi-bin/gitweb.cgi [L,PT]
# make access for "dumb clients" work
RewriteRule ^/(.*\.git/(?!/?(HEAD|info|objects|refs)).*)?$ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT]
--- Все еще ищем решение вопроса 2 ... ПОМОГИТЕ! :) ---
Теперь, когда клонирование HTTP работает для всех моих репозиториев, мне интересно, есть ли способ управлять контролем доступа HTTP с помощью gitosis. Установка daemon = no
и gitweb = no
отключает доступ к git-daemon и gitweb для репозитория, но поскольку правила перезаписи Apache все еще включены, репозиторий по-прежнему может клонироваться в http://git.example.com/repo.git
. Любые идеи о том, как использовать Gitosis для управления этим?
[Вопрос, который я первоначально разместил]
Можно ли управлять http-доступом к репозиториям git с помощью gitosis? Например, в gitosis.conf я могу управлять доступом для gitweb и git-demon, используя:
# Allow gitweb to show this repository.
gitweb = yes
# Allow git-daemon to publish this repository.
daemon = no
В настоящее время я могу клонировать свой репозиторий, выполнив следующую команду:
$ git clone git://git.example.com/repo.git
Однако, когда я запускаю следующую команду:
$ git clone http://git.example.com/repo.git
Я получаю следующее сообщение об ошибке:
fatal: http://git.example.com/repo.git/info/refs not found: did you run git update-server-info on the server?
Тем не менее, если я войду в свой сервер и выполню следующее из repo.git:
# From http://progit.org/book/ch4-5.html
$ cd project.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update
$ git update-server-info
тогда клонирование по http работает нормально.
Есть ли способ управлять http-доступом к хранилищу изнутри gitosis?