| | Início | Empresa | Serviços | Cursos | Artigos & Tutoriais | Blog | Calendário de Cursos | Clientes | Fale Conosco | |
Autor: André Felipe Dias. Última atualização em 25/07/2008
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.
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.
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.
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.
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.
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.
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).
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.
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.
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 | ![]() |
||
| Renomeações e cópias de arquivos e diretórios | ![]() |
![]() |
|
| Rastreamento de Fusões (Merge) | ![]() |
![]() |
![]() |
| Permissões de Repositório | ![]() |
![]() |
![]() |
| Documentação Disponível | ![]() |
![]() |
![]() |
| Portabilidade | ![]() |
![]() |
|
| Open Source | ![]() |
![]() |
|
| Interfaces Gráficas | ![]() |
![]() |
![]() |
| Suporta Grande Repositório | ![]() |
![]() |
| Legenda: | |
![]() |
possui tal funcionalidade |
![]() |
atende parcialmente o requisito |
![]() |
existe previsão para implementação da funcionalidade no futuro |
![]() |
informações insuficientes para classificação |

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
...
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
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.
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.
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
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.
Iniciar > Programas > Apache HTTP Server 2.0.55 > Control Apache Server > Restart
|
--- criação da área de teste
C:\srv\svn\repos> dir demo /d
--- importação de um projeto já existente
|
|
C:\> svn checkout http://localhost/svn/demo/ area_trabalho
C:\> cd area_trabalho |
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:
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.
Oferecemos treinamento completo sobre controle de versão usando o Subversion. O curso é dividido em dois módulos:
O curso utiliza uma grande quantidade de exemplos e exercícios práticos para fixação dos conceitos apresentados.
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.
Faça o curso de Gerência de Configuração de Software com Trac e Subversion!