Subversion

Autor: André Felipe Dias. Última atualização em 25/07/2008

1. Introdução

projeto do Subversion

Subversion é uma ferramenta open-source de controle de versão (veja o tutorial sobre controle de versão de software para mais informações). Segue a licença de software livre nos moldes da licença Apache/BSD.

O projeto do Subversion iniciou em 2000 com a idéia de se construir um CVS melhor, isto é, mantendo o mesmo modelo de trabalho, mas consertando as falhas e limitações que o CVS apresenta. Desde então, vem atraindo uma comunidade cada vez maior de colaboradores e usuários.

1.1 Projetos que Migraram e Usam Subversion

O objetivo de substituir o CVS como padrão de facto vem sendo alcançado pouco a pouco. Diversos projetos open source representativos já migraram seus repositórios para o Subversion.

Projeto Repositório
Apache Software Foundation http://svn.apache.org/repos/asf/
Debian http://svn.debian.org/
Zope http://svn.zope.org/
KDE http://websvn.kde.org/
Mono http://mono.myrealbox.com/
Produto brasileiro Conectiva Linux https://moin.conectiva.com.br/RepositorySystem

2. Funcionalidades

Subversion tem a maior parte das funcionalidades do CVS. De modo geral, a interface do Subversion segue à do CVS. Isto facilita a transição dos usuários do CVS para o Subversion.

Controle de Diretórios, Renomeações e Meta-Dados

Esta era uma das maiores reclamações sobre o CVS. Subversion não só controla a versão do conteúdo dos arquivos, mas também de diretórios, cópias, renomeações e meta-dados.

Operações Atômicas de commit

Um conjunto de modificações a serem realizadas num commit é aceito como um todo ou nenhuma alteração é feita. Não há a possibilidade que apenas uma parte das alterações seja aceita quando enviadas ao repositório tal como acontecia no CVS. Além disso, os números de revisão estão atrelados a cada operação de commit e não aos arquivos.

Opções de Acesso à Rede

Subversion foi projetado para uma camada abstrata de acesso ao repositório, o que permite a implementação de novos mecanismos de rede. Um dos mecanismos existentes usa o protocolo WebDAV/DeltaV baseado em HTTP através do Apache 2. A outra opção é o servidor dedicado svnserve como opção ao Apache, e que pdoe ser combinado ao ssh.

Arquivos Binários e de Texto Tratados Consistentemente

Outro grande problema bastante conhecido é que o CVS que não funciona tão bem com arquivos binários. Por outro lado, o Subversion usa um algoritmo de diferenciação binário que funciona de modo idêntico tanto para arquivos texto (legíveis por humanos) quanto para arquivos binários (ilegíveis para humanos).

Ramificações e Rotulações em Tempo Constante

O tempo das operações de ramificação (branching) e rotulação (tagging) é constante, e não depende do tamanho do projeto no repositório. Esse resultado é obtido através da forma de implementação do Subversion para essas operações, que é feita como uma operação de cópia que resulta em links, ocupando pouco espaço e um intervalo de tempo constante.

Uso mais Eficiente da Rede

O protocolo de rede usa a largura de banda eficientemente enviando as diferenças entre cliente/servidor e servidor/cliente sempre que possível, ao contrário do CVS que envia as diferenças do servidor ao cliente, mas não do cliente ao servidor.

Quadro Comparativo

A seguir, é aprentado um pequeno quadro comparativo entre o Visual Source Safe (VSS), o CVS e o Subversion (SVN). Ressaltamos que este quadro não representa uma comparação completa e deverá ser aprimorado com o tempo.

Funcionalidade VSS CVS SVN
Commit Atômico sim
Renomeações e cópias de arquivos e diretórios parcialmente sim
Rastreamento de Fusões (Merge) Não determinado parcialmente parcialmentePrevisão de implementação futura
Permissões de Repositório parcialmente parcialmente sim
Documentação Disponível parcialmente sim sim
Portabilidade sim sim
Open Source sim sim
Interfaces Gráficas sim sim sim
Suporta Grande Repositório sim sim
Legenda:
sim possui tal funcionalidade
parcialmente atende parcialmente o requisito
Previsão de implementação futura existe previsão para implementação da funcionalidade no futuro
Não determinado informações insuficientes para classificação

3. Arquitetura


Arquitetura do Subversion

Componentes Básicos do Subversion

Existem diversos aplicativos de interfaces gráficas que podem ser usadas com o Subversion. Entretanto, o pacote básico vem com diversos componentes relacionados a aplicações de linha de comando. Alguns deles são:

Comando Descrição
svn comando para as funcionalidades básicas do controle de versão (checkout, commit, update etc.)
svnadmin comando para cuidar da parte administrativa do repositório (criação, ajustes etc.)
svnserve servidor dedicado que é uma das opções para disponibilizar os repositórios pela rede. Pode ser usado em conjunto com SSH
svnlook comando para inspecionar o repositório

Cada comando possui subcomandos para cada ação específica. Para mais informações utilize <comando> help e <comando> help <sub-comando> para ajuda no sub-comando específico. Exemplos:

$ svn help
...
$ svn help commit
...
$ svnadmin help
...
$ svnadmin help create
...
$ svnlook help
...

Servidores de Repositório

O repositório do Subversion pode ser acessado de vários modos diferentes: através do disco local e protocolos de rede. Independentemente do modo escolhido, a localização do repositório é sempre através de uma URL. A tabela a seguir descreve diferentes esquemas de URL para os métodos de acesso disponíveis:

Esquema Método de Acesso
file:/// Acesso direto ao repositório (por meio de disco local)
http:// Acesso via protocolo WebDAV através do servidor Apache
https:// o mesmo que http:// mas com segurança SSL
svn:// Acesso pelo svnserve
svn+ssh:// Acesso pelo svnserve usando túnel SSH

O acesso local é bastante limitado e não serve para o ambiente de produção. As outras opções oferecem funcionalidades adequadas para o acesso ao repositório por uma equipe de desenvolvimento.

A escolha do servidor adequado dependem de diversos fatores e exigem certos cuidados na configuração. Embora existam diversas combinações possíveis de servidor e plataforma, recomendamos sempre que possível a utilização do Apache 2 rodando em Linux para servidor do Subversion.

A configuração de servidores e dos repositórios é tratada em detalhes no curso de Controle de Versão com Subversion

4. Instalação

Subversion é construído usando uma biblioteca de portabilidade chamada de APR (Apache Portable Runtime). Por isso, o Subversion roda em qualquer sistema operacional que o servidor Apache roda: Windows, Linux, BSD, Mac OS X, Netware e outros.

O modo mais fácil de se obter o Subversion é fazer o download do pacote apropriado para o seu sistema operacional na página http://subversion.tigris.org/project_packages.html.

Além do pacote básico, o Subversion pode ser complementado com diversas outros pacotes que fornecem interfaces gráficas (e.g. TortoiseSVN), plugins para Visual Studio (AnkhSVN) e Eclipse (Subeclipse), visualizadores de repositório (e.g. WebSVN) etc.

5. Demonstração Rápida

O objetivo desta seção é fornecer uma visão panorâmica do funcionamento do Subversion sem entrar em questões técnicas específicas. No exemplo abaixo, será apresentado uma instalação simples, sem preocupações com autenticação ou autorização, usando Apache 2.0.55 (ou superior) e o Subversion 1.2.x no Windows.

  1. Obtenha o Apache 2.0.55 no endereço http://httpd.apache.org/download.cgi. Escolha a versão Win32 Binary (MSI Installer) do Apache 2.0.55. Atenção: O Subversion não funciona com o Apache 1.3.xx.
  2. Execute o programa e siga as instruções de instalação.
  3. Obtenha o pacote de instalação mais novo do Subversion no endereço http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91 Atenção: obtenha o arquivo mais recente com extensão .exe. A versão 1.1.4 também serve.
  4. Execute o programa e siga as instruções de instalação. O programa de instalação identifica e instala automaticamente os módulos necessários para o funcionamento com Apache. Atenção: para facilitar a instalação, é importante que o Subversion seja instalado depois do Apache.
  5. É necessário disponibilizar o repositório através do Apache. Abra o arquivo de configuração do Apache:

    Iniciar > Programas > Apache HTTP Server 2.0.55 > Configure Apache Server > Edit the Apache httpd.conf Configuration File

    Insira ao final do arquivo o seguinte trecho de código:

    <Location /svn>
    DAV svn
    SVNParentPath c:/srv/svn/repos
    </Location>

    Assim, todos os repositórios criados no diretório c:\srv\svn\repos ficam disponíveis pela URL http://localhost/svn/nome_repositorio

  6. Teste a configuração:

    Iniciar > Programas > Apache HTTP Server 2.0.55 > Configure Apache Server > Test Configuration

    Se tudo correu bem, uma janela abre e fecha sem mostrar nenhuma mensagem.

  7. Reinicie o Apache:

    Iniciar > Programas > Apache HTTP Server 2.0.55 > Control Apache Server > Restart

  8. Criação do repositório:

    --- criação da área de teste
    --- verifique se o caminho do Subversion está no Path
    C:\srv\svn\repos> svnadmin create demo

    C:\srv\svn\repos> dir demo /d
    Directory of C:\srv\svn\repos\demo
    [.]   [conf]   [db]   [locks]   README.txt
    [..]   [dav]   [hooks]   format
       2 File(s)   390 bytes
       7 Dir(s)  ... bytes free

    --- importação de um projeto já existente
    --- utilize um diretório qualquer que tenha alguns arquivos para teste
    C:\srv\svn\repos> svn  import  .  http://localhost/svn/demo/  -m "importação inicial"

    Adicionando   C:\treinamento\source
    Adicionando   C:\treinamento\source oo.c
    Adicionando   C:\treinamento\source\bar.c
    Adicionando   C:\treinamento\source\math.pas
    Adicionando   C:\treinamento\doc
    Adicionando   C:\treinamento\doc\instrucoes.html
    Adic.  (bin)    C:\treinamento\doc\instrucoes.doc
    Adic.  (bin)    C:\treinamento\doc\notebook.jpg
    Adicionando   C:\treinamento\README

    Commit da revisão 1.

  9. Nesse momento, o repositório está criado e já contém alguns arquivos que foram importados de um projeto existente. Experimente visualizar o repositório através de um browser pela URL: http://localhost/svn/demo/
  10. Para começar a trabalhar no projeto, é necessário criar uma cópia de trabalho. Isto é feito da seguinte forma:

    C:\> svn checkout  http://localhost/svn/demo/  area_trabalho
    A  area_trabalho\source
    A  area_trabalho\source\mfoo.pas
    A  area_trabalho\source oo.c
    A  area_trabalho\source\bar.c
    A  area_trabalho\source\math.pas
    A  area_trabalho\doc
    A  area_trabalho\doc\instrucoes.html
    A  area_trabalho\doc\instrucoes.doc
    A  area_trabalho\doc\notebook.jpg
    A  area_trabalho\README
    Gerado cópia de trabalho para revisão 1.

    C:\> cd area_trabalho

  11. Agora já existe uma área de trabalho específica para o desenvolvedor trabalhar. Os passos seguintes são:
    1. Alterar o conteúdo de um ou mais itens da área de trabalho
    2. Execute o comando svn diff para ver as alterações efetuadas
    3. Publique as mudanças no repositório através do comando svn commit. Não esqueça de inserir o comentário de log explicando o motivo das alterações realizadas através da opção -m.
    4. Se houver mais desenvolvedores em conjunto, as modificações feitas por outras pessoas no repositório podem ser atualizadas na área de trabalho através do comando svn update.

6. Considerações Finais

Este tutorial fez apenas uma apresentação inicial do Subversion. Existem muitas outras características e funcionalidades importantes que vão muito além dos comandos de checkout, update e commit.

Para realmente se obter uma solução de controle de versão com a ferramenta é necessário um conhecimento mais técnico e profundo:

  1. Conceitos Básicos de Gerência de Configuração e Controle de Versão
  2. Funcionamento Interno do Subversion
  3. Ciclo Básico de Trabalho
  4. Ramificações de Projeto
  5. Configuração do Servidor
  6. Administração do Repositório
Uma ferramenta não traz melhorias por si só, mas encoraja a adoção da prática correta para melhorar o processo de desenvolvimento. O ganho de produtividade e qualidade só é obtido com treinamento específico para utilização completa e correta da ferramenta. Caso contrário, há apenas o aumento na burocracia do desenvolvimento.

Curso de Controle de Versão com Subversion

Oferecemos treinamento completo sobre controle de versão usando o Subversion. O curso é dividido em dois módulos:

  1. O primeiro módulo aborda todos os aspectos necessários para o dia-a-dia do desenvolvimento de software utilizando Subversion.
  2. O segundo módulo trata de tópicos avançados, tais como configuração do servidor e administração de repositórios.

O curso utiliza uma grande quantidade de exemplos e exercícios práticos para fixação dos conceitos apresentados.

Informações e Inscrições

Mais informações podem ser obtidas diretamente na página do curso de controle de versão. Faça agora mesmo uma reserva on-line para uma vaga neste curso.

< voltar


Outros artigos & tutoriais
Setembro 2010
DomSegTerQuaQuiSexSáb
1234
567891011
12131415161718
19202122232425
2627282930
Outubro 2010
DomSegTerQuaQuiSexSáb
12
3456789
10111213141516
17181920212223
24252627282930
31