Montando um repositório SVN integrado ao Apache e usando o cliente RabbitVCS

subversion

O subversion é um sistema de controle de versão livre/open-source. Isto é, o Subversion gerencia arquivos e diretórios, e as modificações feitas neles ao longo do tempo. Isto permite que você recupere versões antigas de seus dados, ou que examine o histórico de suas alterações. Devido a isso, muitas pessoas tratam um sistema de controle de versão como uma espécie de ‘máquina do tempo’.

O Subversion pode funcionar em rede, o que lhe possibilita ser usado por pessoas em diferentes computadores. Em certo nível, a capacidade de várias pessoas modificarem e gerenciarem o mesmo conjunto de dados de seus próprios locais é o que fomenta a colaboração. Progressos podem ocorrer muito mais rapidamente quando não há um gargalo único por onde todas as modificações devam acontecer. E como o trabalho está versionado, você não precisa ter medo de que seu trabalho perca qualidade por não ter essa via única para modificações—se os dados sofrerem alguma modificação indevida, apenas desfaça tal codificação.”

O cenário utilizado é um servidor com Debian Squeeze e estação Ubuntu 10.04

1 – Instalando os pacotes necessários:

# apt-get update && apt-get install subversion subversion-tools libapache2-svn

Assim que os pacotes forem baixados e instalados o módulo para integração libapache2-svn será iniciado e bastará apenas reiniciar o Apache para entrar em funcionamento.

2 – Criando o diretório onde iremos criar os repositórios subversion:

# mkdir -p /usr/local/svn

3 – Criando o repositório propriamente dito e aplicando as permissões necessárias:

# svnadmin create --fs-type fsfs /usr/local/svn/repositorio
# chown -R www-data:subversion /usr/local/svn/repositorio
# chmod -R 770 /usr/local/svn/repositorio

4 – Configurando o repositório:

# nano /etc/apache2/mods-available/dav_svn.conf

Este é o arquivo original:

# dav_svn.conf – Example Subversion/Apache configuration
#
# For details and further options see the Apache user manual and
# the Subversion book.
#
# NOTE: for a setup with multiple vhosts, you will want to do this
# configuration in /etc/apache2/sites-available/*, not here.

# In this example clients access the repository as http://hostname/svn/

  # Uncomment this to enable the repository
  #DAV svn

  # Set this to the path to your repository
  #SVNPath /var/lib/svn
  # Alternatively, use SVNParentPath if you have multiple repositories under
  # under a single directory (/var/lib/svn/repo1, /var/lib/svn/repo2, …).
  # You need either SVNPath and SVNParentPath, but not both.
  #SVNParentPath /var/lib/svn

  # Access control is done at 3 levels: (1) Apache authentication, via
  # any of several methods.  A “Basic Auth” section is commented out
  # below.  (2) Apache <Limit> and <LimitExcept>, also commented out
  # below.  (3) mod_authz_svn is a svn-specific authorization module
  # which offers fine-grained read/write access control for paths
  # within a repository.  (The first two layers are coarse-grained; you
  # can only enable/disable access to an entire repository.)  Note that
  # mod_authz_svn is noticeably slower than the other two layers, so if
  # you don’t need the fine-grained control, don’t configure it.

  # Basic Authentication is repository-wide.  It is not secure unless
  # you are using https.  See the ‘htpasswd’ command to create and
  # manage the password file – and the documentation for the
  # ‘auth_basic’ and ‘authn_file’ modules, which you will need for this
  # (enable them with ‘a2enmod’).
  #AuthType Basic
  #AuthName “Subversion Repository”
  #AuthUserFile /etc/apache2/dav_svn.passwd

  # To enable authorization via mod_authz_svn
  #AuthzSVNAccessFile /etc/apache2/dav_svn.authz

  # The following three lines allow anonymous read, but make
  # committers authenticate themselves.  It requires the ‘authz_user’
  # module (enable it with ‘a2enmod’).
  #<LimitExcept GET PROPFIND OPTIONS REPORT>
    #Require valid-user
  #</LimitExcept>

Realizando a configuração necessária fica assim:

<Location /svn/repositorio>
        DAV svn
        SVNPath /usr/local/svn/repositorio
        AuthType Basic
        AuthName “Acessando repositorio Subversion”
        AuthUserFile /etc/apache2/auth
        #<LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
        #</LimitExcept>
</Location>

5 – Crie o arquivo de senhas e os usuários que acessarão o repositório:

# htpasswd -c /etc/apache2/auth dunhao

New password:
Re-type new password:
Adding password for user dunhao

Para criar novos usuários você deve tirar do comando htpasswd a opção “-c” pois ela criaria um novo arquivo, o que não é o desejado.

Reinicie o Apache:

# service apache2 restart

Restarting web server: apache2apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
 … waiting apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName

Neste momento já temos o SVN integrado ao Apache2, agora vamos realizar o acesso para verificar o funcionamento. Isso é muito simples, basta abrir o browser e digitar http://<ip-do-seu-servidor>/svn/repositorio

acessandosvn

Entre com o seu usuário e senha previamente cadastrados e será liberada a visualização do repositório SVN criado:

acessousvn

Pronto, aí está o repositório (vazio claro! =P)

Agora vamos utilizar um cliente muito interessante que se integra ao GNOME e Thunar chamado RabbitVCS

Existem repositórios de pacotes para as distribuições mais utilizadas (Ubuntu, Debian, CentOS, Red Hat, OpenSuse, Fedora, Arch), basta clicar sobre a distro para ir para a página que explica a instalação.

No meu caso estou usando Ubuntu, então:

$ sudo add-apt-repository ppa:rabbitvcs/ppa
$ sudo apt-get update ; sudo apt-get install rabbitvcs-core rabbitvcs-nautilus rabbitvcs-thunar rabbitvcs-gedit rabbitvcs-cli

Após a instalação, basta reiniciar o sistema.

Assim que voltar, o RabbitVCS já estará integrado junto ao Nautilus/Thunar, deixando o funcionamento semelhante ao TortoiseSVN no Windows.

Crie o local para sincronizar com o servidor e submetendo arquivos. Aqui criarei dentro da minha Home um diretório chamado “repo” e este será o meu diretório de trabalho no servidor SVN. Daí basta inserir os seus projetos e depois fazer o upload para o servidor. Lembrando que toda a modificação realizada deve ser enviada para o servidor para que haja a atualização da Base de dados lá. Isso vale para alterações nos arquivos, deleção, renomeação, etc. Após você ter um repositório em funcionamento e quiser sincronizar com outra máquina basta usar a opção “obter”, inserir o camiho do repositório, entrar com as credenciais e aguardar o download dos arquivos. Em todas as opções pelas quais você deslizar o mouse observe que na barra de status (parte baixa da janela) aparecerá o que aquele comando faz.

Segue alguns exemplos de uso:

Menu RabbitVCS
Menu RabbitVCS
Importar Arquivo para o repositório
Importar Arquivo para o repositório
Acessando o repositório
Acessando o repositório

Autenticando no repositório
Autenticando no repositório
Término da importação
Término da importação
Atualizando arquivo no repositório
Atualizando arquivo no repositório
Apagando arquivo do repositório
Apagando arquivo do repositório
Repositório populado

Bem, é isso. Sugestões, dúvidas, críticas construtivas são muito bem-vindas. Até o próximo.