Configuração múltipla de HTTP Git Repos

4

O que é o http.conf para servir automaticamente todos os meus repositórios git?

Por exemplo, se eu tenho uma estrutura de diretórios como segue (um número de projeto dentro de um diretório central chamado git):

/../ htdocs / git / project1
/../htdocs/git/project2
/../ htdocs / git / project3

O que devo escrever para evitar repetir o mesmo para cada projeto:

<Location /git/project1>
   DAV on
   AuthType Basic
   AuthName "Git"
   AuthUserFile /../htdocs/git/project1/passwd.git
   Require valid-user
</Location>

Pergunta bônus:

Existe uma maneira de ter o repositório em algum lugar fora dos htdocs do apache e redirecionar as solicitações para lá? (como usar o DocumentRoot)

Notas:

Todos os repos são --bare porque são os repositórios centrais (usados pelo Trac)

    
por pek 05.06.2009 / 13:21

3 respostas

5

Use 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>

Então você acabou de adicionar uma única linha para cada repositório

Use Project repos1
Use Project repos2

Isso não é automático, infelizmente, ou seja, ele não coleta todos os repositórios em um diretório, mas você pode executar uma tarefa do cron para criar a configuração para você:

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

A macro do projeto também pode fazer o trac http config, se desejar.

    
por 05.06.2009 / 16:56
3

Se for possível, sugiro usar o SSH para compartilhar seus repositórios - ele oferecerá melhor segurança e, em geral, funcionará melhor, já que o HTTP é um protocolo "burro" nos termos do Git. Isso também significa que você pode usar as permissões padrão do sistema de arquivos para controlar o acesso e executar scripts de hook, etc. O HTTP é o protocolo de menor denominador comum para o Git, e acho que seria melhor usar outra coisa.

Se você está preso usando HTTP por algum motivo, então a resposta das páginas é o caminho a seguir.

    
por 05.06.2009 / 15:00
1

Se todos os seus repositórios puderem usar o mesmo AuthUserFile, eles funcionarão, mas não acho que seja isso que você está perguntando. Você provavelmente terá que gerar várias seções de localização externamente, digamos com algum código perl, e obter o apache para reler os arquivos de configuração.

Você já pensou em usar gitosis ou git-daemon?

Para sua pergunta de bônus, algo como:

alias /git /path/to/repository/root

<Directory "/path/to/repository/root">
   ...
</Directory>
    
por 05.06.2009 / 14:12

Tags