Controle de Versão com Subversion

"Enterprise-class centralized version control for the masses" - Apache™ Subversion®
O Apache Subversion, conhecido por SVN é um sistema de controle de versão desenhado especificamente para ser um substituto moderno do CVS, que apresentava algumas limitações, como por exemplo não permitir que arquivos e repositórios fossem renomeados ou movidos a partir do cliente ou ainda que dois usuários atualizem o mesmo arquivo ao mesmo tempo.
Entre as funcionalidades deste sistema estão:
- Versionamento de diretórios;
- Versionamento de renomeação, cópia e exclusão;
- Commits atômicos;
- Merge tracking;
- Bloqueio de arquivos;
- Resolução de conflitos interativos.
Quando utilizar o SVN?
Como um sistema centralizado, o SVN atende de forma satisfatória as equipes grandes de desenvolvimento. Baseia-se em arquitetura Cliente-Servidor e, em equipes com acesso local ao repositório central, o tempo de resposta do processamento é aceitável.
A utilização do SVN pode ser um problema para equipes geograficamente distribuídas, visto que a arquitetura utilizada por ele pode significar uma limitação de performance, conexão e de acesso para os membros da equipe.
![]() |
Fonte: www.ovh.ie |
História
A empresa CollabNet deu início ao desenvolvimento do SVN no início dos anos 2000, a ideia inicial era utilizar a base do CVS, mas em decorrência da quantidade de bugs encontrada pela equipe, optou-se por iniciar a construção do zero. O objetivo era encontrar melhores soluções para o gerenciamento de versões analisando as limitações do CVS.
A primeira versão foi concluída em 2001, inclusive sendo utilizada pela equipe para gerir o próprio código. Em 2009 o software foi integrado à Apache Software Foundation e em 2010, quando passou a ser largamente utilizado em projetos de nível superior da apache, o sistema foi rebatizado para Apache Subversion. Está disponível em <http://subversion.apache.org>.
Trabalhando com o Apache Subversion
Para começar a trabalhar com o SVN é importante conhecer o conceito das principais ações a serem realizadas por meio do sistema. São as seguintes:
Repositório: é uma referência a um banco de dados que contém todos os arquivos versionados com seu histórico completo. Trata-se de uma cópia mestre de todos os seus dados. Fica alocado num servidor de arquivos que roda num servidor Subversion.
Cópia de trabalho: é o local onde o projeto é produzido, uma cópia do projeto na máquina do desenvolvedor. Não guarda todo o histórico do projeto, mas uma cópia das modificações realizadas localmente. O desenvolvedor pode baixar a última versão do repositório, seguir com a produção localmente e ao completar as mudanças necessárias, enviá-las de volta ao repositório.
Checkout: Download de um projeto no servidor para a máquina local, de modo que os arquivos possam ser trabalhados.
Import: Transferência de arquivos de outro projeto para o repositório. Deve ser seguido de um checkout.
Export: Upload de um projeto que não tem vínculo com o SVN para o repositório.
Commit: Envio das modificações realizadas no ambiente local para o servidor SVN.
Update: Atualização da cópia local, utilizando a última versão presente no servidor SVN.
Revision: Número sequencial que identifica cada uma das alterações ou conjunto de alterações realizadas em um repositório.
HEAD: É a revisão mais recente do repositório.
Diretórios especiais: São três tipos de diretórios especiais com funções definidas:
- trunk: versão funcional mais recente do projeto.
- branches: versões de desenvolvimento paralelo oriundas do trunk, porém isoladas deste. Deve ser utilizado quando uma implementação trouxer o risco de afetar a integridade do trunk.
- tags: utiliza etiquetas para facilitar a localização de revisões. Cada etiqueta possui um nome único que a identifica, sendo criada como um diretório, sempre através do trunk.
Branch/Tag: Refere-se à geração de branches ou tags a partir de um trunk ou geração de um branch a partir de uma tag ou outro branch.
Merge: Refere-se à mesclagem de revisões entre os diretórios especiais. Sempre deve ser realizada com a cópia de trabalho apontando para o destino do merge.
Switch: Alteração do repositório utilizado por uma cópia de trabalho. É realizada uma atualização ou mesclagem dos arquivos para assegurar que a cópia de trabalho contenha exatamente o conteúdo do novo repositório mais quaisquer alterações locais.
Relocate: Realocação do endereço de um repositório. Apenas atualiza o endereço, sem realizar nenhum tipo de atualização nos arquivos.
Comandos para Linux:
Abaixo estão listados exemplos de linhas comandos para trabalhar com SVN pelo prompt. São comandos para sistemas Linux, podem variar de acordo com a distribuição que se estiver utilizando.
Listar os comandos do SVN:
$ svn --help
Adicionar diretório:
$ svn add directory
Adicionar arquivo:
$ svn add arquivo
Commit de arquivos ou diretórios locais no repositório SVN:
$ svn commit filename
$ svn commit --message "Message" filename
Deletar arquivo do repositório:
$ svn delete filename
$ svn delete directory
Bloquear arquivo para garantir acesso exclusivo:
$ svn lock filename -m "comment as to why its locked or by whom"
Mostrar as mensagens do log do SVN:
$ svn log filename
Mostrar status das mudanças em um arquivo:
$ svn status
Trazer todas as atualizações do repositório SVN para sua cópia local:
$ svn update
Ferramentas de apoio:
Além do prompt de comando existem diversas ferramentas de apoio que tornam o trabalho mais intuitivo:
- Apache Subversion: versão oficial do Subversion.
- VisualSVN Server: implementação em Windows, possui ambiente gráfico de gerenciamento e permite visualização do conteúdo dos repositórios diretamente pelo navegador.
Menu da ferramenta gráfica TortoiseSVN. Fonte: www.intentor.com.br |
- TortoiseSVN: Ferramenta gráfica para utilização do SVN em ambiente Windows.
- RabbitVCS: Ferramenta gráfica para utilização do SVN em Linux inspirada no TortoiseSVN facilita o gerenciamento do projeto diretamente no Nautilus. Commit Monitor: trás o diferencial de emitir alertas a cada commit realizado nos repositórios SVN.
- CruiseControl e CruiseControl.NET: são ferramentas de Integração Contínua, oferecem controle de versão como parte da tarefa de integração.
FONTES:
Comentários
Postar um comentário