Что такое http.conf для автоматического обслуживания всех моих репозиториев git?
Например, если у меня есть следующая структура каталогов (номер проекта внутри центрального каталога с именем git):
/../htdocs/git/project1
/../htdocs/git/project2
/../htdocs/git/project3
Что мне нужно написать, чтобы не повторять одно и то же для каждого проекта:
<Location /git/project1>
DAV on
AuthType Basic
AuthName "Git"
AuthUserFile /../htdocs/git/project1/passwd.git
Require valid-user
</Location>
Бонусный вопрос:
Есть ли способ разместить репозитории где-нибудь за пределами htdocs apache и перенаправить туда запросы? (как при использовании DocumentRoot)
Ноты:
Все репозитории --bare, потому что они являются центральными репозиториями (которые использует Trac)
Используйте mod_macro:
<Macro Project $repos>
<Location /git/$repos>
DAV on
AuthType Basic
AuthName "Git for $repos"
AuthUserFile /../htdocs/git/$repos/passwd.git
Require valid-user
</Location>
</Macro>
Затем вы просто добавляете одну строку для каждого репозитория
Use Project repos1
Use Project repos2
К сожалению, это не происходит автоматически, то есть не собирает все репозитории в каталоге, но вы можете запустить задание cron для создания конфигурации для вас:
echo "# Git repository definitions" > /path/to/httpd_projectdef.conf
for i in /path/to/git/*; do echo "Use Project `basename $i`" >> /path/to/httpd_projectdef.conf; done
Макрос проекта также может выполнять конфигурацию http trac, если вы хотите.
Если это вообще возможно, я бы предложил использовать SSH для совместного использования ваших репозиториев - это обеспечит лучшую безопасность и в целом будет работать лучше, поскольку HTTP - это «тупой» протокол в терминах Git. Это также означает, что вы можете использовать стандартные разрешения файловой системы для управления доступом, и вы можете запускать сценарии ловушек и т. Д. HTTP - это протокол с наименьшим общим знаменателем для Git, и я думаю, вам было бы лучше использовать что-то другое.
Если вы по какой-то причине застряли в использовании HTTP, тогда вам подойдет ответ pgs.
Если все ваши репозитории могут использовать один и тот же AuthUserFile, тогда подойдет, но я не думаю, что вы об этом спрашиваете. Вероятно, вам придется сгенерировать несколько разделов Location извне, скажем, с помощью некоторого кода Perl, и заставить apache перечитывать файлы конфигурации.
Вы рассматривали возможность использования gitosis или git-daemon?
Для вашего вопроса о бонусе, например:
alias /git /path/to/repository/root
<Directory "/path/to/repository/root">
...
</Directory>