Subversion (SVN)http://subversion.tigris.org/ é um sistema de controle de versão projetado para ser o sucessor do CVS (Concurrent Versions System). O conceito é similar ao CVS, mas muitas deficiências foram melhoradas. Veja também o SVN bookhttp://svnbook.red-bean.com/en/1.4/.
configuração do servidor setup
A iniciação do repositório é bastante simples (aqui por exemplo /home/svn/
deve existe):
# svnadmin create --fs-type fsfs /home/svn/project1
Agora o acesso ao repositório torna-se possível com:
file://
Acesso direto ao sistema de arquivo com o cliente svn. Isso requer permissões locais no sistema de arquivo.svn://
ousvn+ssh://
acesso remoto com o servidor svnserve (também pelo SSH). Isso requer permissões locais no sistema de arquivo (porta padrão: 2690/tcp).http://
Acesso remoto com o webdav utilizando o apache. usuários locais não são necessário para esse método.
Utilizando o sistema de arquivo local, não é possível importar e então verificar um projeto existente. diferente do CVS, não é necessário dar cd dentro do diretório do projeto, simplesmente dê o path completo:
# svn import /project1/ file:///home/svn/project1/trunk -m 'Initial import' # svn checkout file:///home/svn/project1
O novo diretório “trunk” é somente uma convenção, isso não exigido.
Acesso remoto com ssh
Nenhuma configuração especial é exigida para acessar o repositório via ssh, simplesmente substitua file://
com svn+ssh/hostname
. Por exemplo:
# svn checkout svn+ssh://hostname/home/svn/project1
Assim com o acesso ao arquivo local, todo usuário precisa de um acesso ssh para o servidor (com uma conta local) e também acesso a leitura/escrita. Esse método pode ser adequado para um grupo pequeno. Todos os usuários poderia pertencer a um grupo de subversão que pertence ao repositório, por exemplo:
# groupadd subversion # groupmod -A user1 subversion # chown -R root:subversion /home/svn # chmod -R 770 /home/svn
Acesso remoto com o http (apache)
Acesso remoto pelo http (https) é a única boa solução para um grupo de usuários grande. Esse método utiliza a autenticação apache, não as contas local. Essa é uma configuração típica do apache, porém pequena:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so # Somente para controle de acesso
<Location /svn>
DAV svn
# qualquer URL "/svn/foo" será mapeado para um repositório /home/svn/foo
SVNParentPath /home/svn
AuthType Basic
AuthName "Subversion repository"
AuthzSVNAccessFile /etc/apache2/svn.acl
AuthUserFile /etc/apache2/svn-passwd
Require valid-user
</Location>
O servidor apache precisa de total acesso ao repositório:
# chown -R www:www /home/svn
Criar um usuário com o htpasswd2:
# htpasswd -c /etc/svn-passwd user1 # -c cria o arquivo
Exemplo de controle de acesso svn.acl
# Acesso padrão é somente leitura. "* =" seria sem acesso padrão [/] * = r [groups] project1-developers = joe, jack, jane # Da acesso de escrita aos desenvolvedores [project1:] @project1-developers = rw
Comandos SVN e uso
Veja também o Subversion Quick Reference Cardhttp://www.cs.put.poznan.pl/csobaniec/Papers/svn-refcard.pdf. Tortoise SVNhttp://tortoisesvn.tigris.org é uma interface de janela agradável.
Importar
um novo projeto, que é um diretório com alguns arquivos, é importado para dentro do repositório com o comando import
. Import também é utilizado para adicionar um diretório com seu conteúdo para um projeto existente.
# svn help import # obtém ajuda para qualquer comando # Adiciona um novo diretório (com conteúdo) para dentro do diretório src no project1 # svn import /project1/newdir http://host.url/svn/project1/trunk/src -m 'add newdir'
Typical SVN commands
# svn co http://host.url/svn/project1/trunk # Verifica a versão mais recente # Etiquetas (Tags) e ramos (branches) são gerados ao copiar # svn mkdir http://host.url/svn/project1/tags/ # Cria o diretório tags # svn copy -m "Tag rc1 rel." http://host.url/svn/project1/trunk \ http://host.url/svn/project1/tags/1.0rc1 # svn status [--verbose] # Verifica status de arquivos dentro do diretório de trabalho # svn add src/file.h src/file.cpp # Adiciona dois arquivos # svn commit -m 'Added new class file' # Gera as alterações com uma mensagem # svn ls http://host.url/svn/project1/tags/ # Lista todas as tags # svn move foo.c bar.c # Move (renomeia) arquivos # svn delete some_old_file # Exclui arquivos