Servidor Subversion Linux + Clientes Subversion Windows

Bom… tenho um servidor linux para algumas tarefas e uma delas será guardar um repositório de códigos fontes com controle de versões (Subversion)  para que possam ser trabalhados por uma ou mais pessoas através de máquinas Windows.

No lado do servidor (linux) usaremos um Ubuntu server 11.04 rodando o subversion+apache2 e do lado dos clientes (Windows) usaremos o
TortoiseSVN v1.6.16 (atual no momento deste tutorial).

Primeiro vamos ao servidor e a criação do repositório.

O primeiro passo é instalar o subversion (supondo que você já tenha um servidor apache2 rodando):

$ sudo apt-get install subversion libapache2-svn

O Próximo passo é configurar onde ficarão os repositórios dos projetos (no meu caso escolhi o diretório /var/lib/svn):

$ sudo mkdir /var/lib/svn

O próximo passo é configurar o apache para apontar para este diretório no http://dominio/svn/

para isso vamos configurar o modulo
dav_svn:

$ sudo vim /etc/apache2/mods-available/dav_svn.conf

Ele deve ficar parecido com isso:

    DAV svn
    SVNParentPath /var/lib/svn
    AuthType Basic
    AuthName "Repositorio Subversion"
    #arquivo de senha dos usuários:
    AuthUserFile /etc/apache2/dav_svn.passwd
    #arquivo de permissoes nos projetos:
    AuthzSVNAccessFile /etc/apache2/dav_svn.authz
    #impedir login anônimo
    Require valid-user


O Próximo passo é criar os usuários que irão acessar os projetos (Detalhe… use a opção -c só para o primeiro usuário, pois isso cria o arquivo):

$sudo htpasswd -cm /etc/apache2/dav_svn.passwd usuario1
New password:
Re-type new password:
Adding password for user usuario1

$sudo htpasswd -m /etc/apache2/dav_svn.passwd usuario2
New password:
Re-type new password:
Adding password for user usuario2

$sudo htpasswd -m /etc/apache2/dav_svn.passwd usuario3
New password:
Re-type new password:
Adding password for user usuario3

… E mais quantos usuários for necessário.

Agora iremos definir quais projetos cada usuário pode acessar criando o arquivo
dav_svn.authz:

$ sudo vim /etc/apache2/dav_svn.authz

E ele ficará com algo parecido com isso:
[projeto1:/]
@grupo1 = rw

[projeto2:/]
@grupo2 = rw

[groups]
grupo1 = usuario1,usuario2
grupo2 = usuario2,usuario3

Pronto. Desta forma o usuário1, e o usuário2 podem apenas acessar o repositório do projeto1 e o usuário2 e o 3 podem acessar o repositório do projeto2. reparem que o usuário2, pode acessar todos os repositórios.

Criados os usuários… definidos os grupos e quais repositórios de projetos cada um podem acessar, falta apenas criar os repositórios:

$ sudo mkdir /var/lib/svn/projeto1
$ sudo svnadmin create /var/lib/svn/projeto1

$ sudo mkdir /var/lib/svn/projeto2
$ sudo svnadmin create /var/lib/svn/projeto2

Como iremos gerenciar os repositórios através do apache, vamos mudar o dono dos repositórios para o usuário www-data:

$ sudo chown -R www-data /var/lib/svn/projeto1
$ sudo chown -R www-data /var/lib/svn/projeto2

e… pra testar tudo… vamos reiniciar o servidor apache:

$ sudo service apache2 restart

Se tudo correu bem, você pode acessar seu repositório pelo navegador através da url http://dominio/svn/projeto1 ou projeto2 e logar com um dos usuários cadastrados neste repositório.

Você verá algo como:

projeto1 - Revision 0: /

Powered by Subversion version 1.6.12 (r955767).

Tudo correu bem…

Você pode criar quantos mais repositórios, usuários e grupos forem necessários…

Vamos agora ao lado dos clientes Windows.

O primeiro passo é instalar o TortoiseSVN.

Uma vez instalado… vamos criar uma estrutura básica de repositório SVN com as pastas
trunk, branches e tags.

Esta estrutura pode ser criada em uma pasta temporária que depois será apagada. Ela servirá apenas para fazermos o upload da estrutura básica para o servidor.

estrutura_basica

Uma vez criada esta estrutura, vamos importa-la para o servidor… só clicar c o botão direito e ir na opção TortoiseSVN > Import…

importando_estrutura

Se tudo correr bem ele vai pedir o login e senha, e vamos receber a seguinte msg de sucesso:

Command Import C:\temp to http://meudominio.com.br/svn/projeto1
Adding C:\temp\trunk
Adding C:\temp\branches
Adding C:\temp\tags
Completed At revision: 1

É sinal que seu repositório está funcional e já possui a estrutura básica (você pode conferir pelo navegador no endereço
http://meudominio.com.br/svn/projeto1

O próximo passo será sincronizar a pasta onde estará o código do seu programa no seu computador com a pasta trunk (pasta de trabalho) do repositório SVN.

Supondo que o meu projeto ficará na pasta
C:\projetos\projeto1\codigo

Você deve clicar com o botão direito e selecionar a opção
SVN Checkout… neste ponto é muito importante não esquecer de adicionar a pasta trunk no servidor que é onde seu repositório será sincronizado.

svn_checkout

Uma vez sincronizada, a pasta terá um pequeno sinal de informação em seu ícone indicando que está sincronizada.

pasta_com_checkout

Sempre que for adicionar um novo arquivo a esta pasta, você deve clicar com o botão direito no arquivo e selecionar a opção TortoiseSVN > Add…. Se atualizarmos o explorer (F5) perceberemos um pequeno sinal de + azul indicando que este arquivo foi adicionado ao repositório e neste momento nossa pasta de código do projeto (C:\projetos\projeto1\codigo) estará com um ícone com exclamação em vermelho indicando que precisa ser sincronizada ao repositório do servidor, pois foram realizadas mudanças.

pasta_precisando_de_sincronismo


Nesta hora precisamos clicar com botão direito na pasta de código e enviar as modificações para o repositório. Vamos utilizar a opção
SVN Commit…

Abrirá uma janela para você escrever uma mensagem… Especificando o que você mudou… e os arquivos que foram alterados… tem opção de dar clique duplo para verificar diferenças entre versões etc… mas simplesmente devemos enviar para o servidor inicialmente… e a partir daí começarmos a trabalhar.

Nas outras máquinas os outros usuários no caso devem criar uma pasta onde ficará o código do projeto e simplesmente dar um
SVN Checkout. na pasta trunk do servidor como fizemos anteriormente. E está pronto.

blog comments powered by Disqus