Subversion · 4 min read · Jan 02, 2026
Configurando um Repositório Subversion Usando Apache, Com Cópia de Trabalho Atualizável Automaticamente - Página 2
Criando um repositório:
Suponha que eu queira criar um Repositório em /usr/local/subversion/repository usando o banco de dados fsfs, então execute o comando:
mkdir -v /usr/local/subversion//usr/bin/svnadmin create --fs-type fsfs /usr/local/subversion/repositoryIsso deve criar um repositório subversion em /usr/local/subversion/repository.
ls /usr/local/subversion/repositoryconf/ dav/ db/ format hooks/ locks/ README.txtVocê deve ser capaz de ver esses arquivos no diretório do repositório.
Configurando httpd.conf para servir o repositório criado:
Adicione as seguintes linhas ao httpd.conf ou ao arquivo de configuração do apache apropriado.
DAV svn
SVNPath /usr/local/subversion/repository/
Certifique-se de que o módulo mod_dav esteja carregado no arquivo de configuração do apache e também esteja presente no diretório de módulos.
Configurando a autenticação:
Para a autenticação, precisamos fazer alterações na configuração do apache mais uma vez.
A autenticação básica requer que apenas adicionemos as seguintes linhas ao httpd.conf onde adicionamos o repositório svn anteriormente.
AuthType Basic
AuthName "{Nome da aba de popup de autenticação}"
AuthUserFile {Localização do arquivo de senha}
Require valid-userEntão deve ficar assim.
DAV svn
SVNPath /usr/local/subversion/repository/
AuthType Basic
AuthName "Repositório subversion"
AuthUserFile /usr/local/subversion/repository/conf/svn-auth-file
Require valid-user
É necessário que adicionemos usuários ao arquivo de senha antes que alguém possa acessá-lo, o que é descrito na próxima etapa.
Adicionando usuários SVN:
Como estamos usando svn com um servidor apache, e um método de autenticação básica do apache.
Precisamos criar um arquivo de senha com o binário htpasswd fornecido com uma instalação padrão do apache.
htpasswd -cmd /usr/local/subversion/repository/conf/svn-auth-file {nome-de-usuario}A opção -c cria um novo arquivo htpasswd.
-m criptografa a senha com um algoritmo MD5.
d criptografa a senha com um algoritmo CRYPT.
Onde {nome-de-usuario} representa um nome de usuário real que será usado para autenticação.
Aviso: Não devemos usar a opção -c uma vez que tenhamos adicionado o primeiro usuário. Usar assim criará e substituirá todos os usuários existentes dentro do arquivo.
htpasswd -md /usr/local/subversion/repository/conf/svn-auth-file {nome-de-usuario}Configurando o layout inicial do repositório:
Um repositório contém principalmente 3 pastas padrão.
branchestagstrunkPara criar essas pastas padrão em um repositório, crie uma pasta temporária em qualquer lugar que você quiser, /tmp seria uma boa ideia, com os seguintes subdiretórios.
mkdir -pv /tmp/subversion-layout/{branches,tags}Depois de termos feito todas as pastas de layout, mova todo o conteúdo do seu projeto para a pasta trunk.
mv -v /usr/local/apache2/htdocs /tmp/subversion-layout/trunkEntão faça uma importação inicial do diretório criado temporariamente.
/usr/local/subversion/bin/svn import /tmp/subversion-layout/ http://127.0.0.1/subversion/Isso irá configurar você com um layout de repositório padrão e fazer uma primeira revisão.
Configurando uma cópia de trabalho:
Podemos excluir as pastas temporárias que criamos na última etapa, uma vez que todos os arquivos já estão no repositório.
Agora o que precisamos fazer é criar uma cópia de trabalho de todos os arquivos no repositório sob /usr/local/apache2/htdocs.
Para que sempre que um desenvolvedor atualize os códigos php, eles possam ver as alterações de código tomando efeito em um ambiente de trabalho.
Mas configurar uma cópia de trabalho não realizaria essa tarefa, precisaríamos fazer os scripts de hook funcionarem com uma cópia de trabalho.
Assim, sempre que um desenvolvedor fizer um commit no repositório, o script de hook será executado e atualizará a cópia de trabalho.
Certifique-se de que a pasta htdocs sob /usr/local/apache2/ não exista.
Se você quiser, pode renomeá-la para htdocs_old.
Para configurar uma cópia de trabalho, faça o seguinte.
cd /usr/local/apache2/su – apache/usr/local/subversion/bin/svn checkout http://127.0.0.1/subversion/trunk/ htdocsConfigurando os scripts de hook:
Um hook é um programa acionado por algum evento do repositório, como a criação de uma nova revisão ou a modificação de uma propriedade não versionada. Cada hook recebe informações suficientes para indicar qual é esse evento, em qual(is) alvo(s) está operando e o nome de usuário da pessoa que acionou o evento. Dependendo da saída ou status de retorno do hook, o programa de hook pode continuar a ação, interrompê-la ou suspender de alguma forma.
O subdiretório hooks é, por padrão, preenchido com templates para vários hooks de repositório.
post-commit.tmpl post-unlock.tmpl pre-revprop-change.tmplpost-lock.tmpl pre-commit.tmpl pre-unlock.tmplpost-revprop-change.tmpl pre-lock.tmpl start-commit.tmplPor enquanto, vou discutir sobre o script de hook post-commit, já que é o que precisamos em nosso caso.
Copie o arquivo post-commit.tmpl para post-commit no mesmo diretório de hooks e dê ao post-commit direitos de execução.
cp -v /usr/local/subversion/repository/hooks/post-commit.tmpl /usr/local/subversion/repository/hooks/post-commitchmod +x /usr/local/subversion/repository/hooks/post-commitAgora edite o script post-commit e comente as duas linhas seguintes na parte inferior, e adicione a seguinte linha a ele.
#commit-email.pl "$REPOS" "$REV" [email protected]
#log-commit.py --repository "$REPOS" --revision "$REV"
/usr/bin/svn update /usr/local/apache2/htdocs/ >> /usr/local/subversion/repository/logs/post-commit.logDepois de fazer isso, crie uma nova pasta logs, sob /usr/local/subversion/ para que possamos habilitar o registro, e crie um arquivo em branco post-commit.log.
mkdir -v /usr/local/subversion/repository/logs/touch /usr/local/subversion/repository/logs/post-commit.logMais uma vez, precisamos garantir que a pasta do repositório tenha a propriedade de usuário adequada, é aconselhável definir a propriedade em /usr/local/subversion/repository/ para o usuário apache.
chown -Rv apache.apache /usr/local/subversion/repository/Se tudo correr bem, isso deve ser tudo.
Você agora tem um servidor de repositório subversion funcionando que está pronto para novas importações, assim que você iniciar o servidor apache.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.