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

Настройка нескольких HTTP-репозиториев Git

Что такое 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>