Tutorial Subversion

Após sofrer um pouco com a utilização do subversion, fiz este tutorial para facilitar minha vida e para ajudar também alguém que possa precisar.

Para este tutorial levamos em consideração que o subversion já está instalado e configurado no servidor. A partir daí seguem alguns comandos básicos (executados no terminal) para efetuar a criação e utilização de repositórios do subversion no linux.

No subversion, não existe a revisão de um determinado arquivo. Os arquivos não tem versões independentes. Todos os arquivos são parte de uma mesma revisão, e a modificação de um único arquivo altera a revisão de todos.

O subversion é um sistema de controle de versões que utiliza o conceito de branches, tags e trunk. Abaixo seguem alguns conceitos para melhor compreensão:

Trunk

A pasta trunk contém os projetos que estão em desenvolvimento. Todas as atualizações efetuadas dia-a-dia são armazenadas na pasta trunk.

Branches

A pasta branches é aquela que contém “linhas de desenvolvimento” de tal projeto, que entre elas podem haver poucas diferenças, porém uma independe da outra.

Quando a equipe decide que o projeto está pronto para ser liberado como uma versão, a pasta trunk é copiada para a pasta branch e dado um nome de versão. Este branch é congelado e não sofre mais alterações, apenas correções. Rigorosos testes são efetuados.

Tags

Quando os testes efetuados encima de um branch estão completos, a versão que se encontra no branch é copiada para a pasta tags, formando assim um “release” ou uma versão “liberada”. Esta pasta tag é empacotada e enviada para o cliente. Qualquer modificação em branch, deve ser copiada para a pasta de tags, após todos os testes.

Svn considera tag apenas uma variação de um branch, e na prática é exatamente como um branch, apenas uma cópia da ramificação atual da árvore.

 

svnadmin

Uma ferramenta para criar, ajustar ou reparar um repositório Subversion.

Criando um repositório

svnadmin create <nome_do_repositório_a_ser_criado>

ou

svnadmin create <path>/<nome_do_repositorio_a_ser_criado>

 

*Para alterar alguma coisa no repositório é necessário, após a criação, baixar uma cópia de trabalho, através do comando “checkout”, alterar e usar o comando “commit” para enviar alterações.

 

svnserve

Um programa servidor independente, que roda como um processo daemon ou pode ser invocado via SSH. É um modo de tornar o repositório disponível na rede.

Tornando o repositório disponível na rede através do protocolo svn

svnserve -d -r <path_repositorio_local>

 

Desta forma, pode-se acessar o repositório de outras máquinas, através do ip ou hostname.

svn ls svn://<hostname>

svn

O programa cliente para linha de comando.

Comandos para as funcionalidades do controle de versão (checkout, commit, update, etc.)

 

*Cada comando possui subcomandos para ações específicas.

 

Importando arquivo ou conteúdo de diretório para o repositório

 

svn import <path_origem> svn://<servidor_repositorio> -m <frase_descricao>

ou

svn import <path_origem> file:///<path_destino> -m <frase_descricao> *É necessario o uso de um protocolo (svn, file, etc.), pois o svn só trabalha com url’s.

 

*Ao importar um diretório, para usar o conceito de branch, tag e trunk, é necessário que se importe uma pasta à qual contém o projeto a ser armazenado no repositório contendo as pastas branch e tag (ambas vazias) e trunk (com os arquivos do projeto).

 

Adicionando arquivos ou diretórios

svn add <path>

 

*Os arquivos serão adicionados ao repositório no próximo commit.

Removendo arquivos do repositório

svn rm <path_copia_local>

svn commit *Exclui da cópia local e dá um commit para o repositório

 

ou

svn rm <path_url_repositorio> *Para excluir diretamente do repositório

 

Listar todos os repositórios disponíveis no servidor srvbuild.

 

svn ls <url_repositorio>

ou

svn list <url_repositorio>

 

Há também outra forma de listar o conteúdo do repositório, passando diretamente o caminho onde ele se encontra no disco.

 

svn ls file:///<path_do_repositorio>

 

Outros parâmetros podem ser passados, como formas diferentes de listar o conteúdo do repositório.

 

svn ls –recursive <repositorio> *Desce recursivamente aos conteúdos de cada diretório

svn ls –verbose <repositorio> *Lista informações adicionais

 

Baixar uma cópia dos arquivos disponíveis no repositório

 

svn co <url_repositorio>

ou

svn checkout <url_repositorio>

 

Adicionalmente podem ser passados alguns parâmetros para baixar revisões específicas.

 

svn co svn://<servidor>/<path> -r <revisao>

ou

svn co file:///<path> -r <revisao> *Neste caso para acessar diretamente o local onde se encontra o repositório

 

Visualizar informações referentes à uma cópia de trabalho ou item remoto

 

svn info

ou

svn info <path>

 

Atualizar uma cópia local com a disponível no repositório

 

svn update *Se estiver na pasta local de trabalho

ou

svn update <path>

 

Listar modificações feitas na cópia de trabalho.

svn diff *Se estiver na pasta local de trabalho

ou

svn diff <path_repositorio>

svn diff lista as linhas dos arquivos que sofreram modificações daquelas que estão no repositório.

 

Listar os arquivos modificados na cópia de trabalho

svn status *Se estiver na pasta local de trabalho

ou

svn status <path_repositorio>

svn status lista os arquivos que sofreram modificações daqueles que estão no repositório.

 

Enviar as alterações efetuadas na cópia local para o repositório.

 

svn commit -m <frase> *Se estiver na pasta à qual possui os arquivos locais do repositório

ou

svn commit <path> -m <frase> *A frase é o relato das alterações que estão sendo postadas

 

 

Liberar uma “release” para o repositório

Após efetuar todos os testes encima do projeto em desenvolvimento o mesmo deve ser disponibilizado como uma cópia estável para a pasta branches do projeto que está sendo desenvolvido. Para isso, é necessário fazer um checkout da ultima versão do projeto no repositório e simplesmente copiar a pasta trunk para dentro da pasta branches.

 

Trabalhando com a cópia local:

svn checkout <repositorio>/<nome_projeto> <destino_copia_trabalho>

    cd <destino_copia_trabalho>

svn copy trunk branches/<nome_release_projeto> *Copiando a pasta trunk para a pasta branches

svn status *Para listar os arquivos que sofreram modificações.

svn commit *Somente agora as alterações vão para o repositório

 

Trabalhando diretamente no repositório

O comando svn copy pode operar sobre diretórios ou diretamente sobre as URL’s do repositório.

svn copy <url_repositorio>/<nome_projeto>/trunk <url_repositorio>/<nome_projeto>/branches -m <frase_descricao>

 

Visualizar logs de alterações

svn log <path> *Mostra as descrições das alterações feitas nos arquivos ou diretórios

ou

svn log –verbose <path> *Mostra as descrições e os arquivos que sofreram alterações

Propriedades

É possível a atribuição de propriedades à arquivos ou diretórios contidos no repositório.

Listar propriedades de um projeto

svn propget <nome_propriedade> <path_repositorio>

ou

svn status *Se estiver na pasta à qual possui os arquivos locais do repositório

ou

svn status <path_da_pasta_que_possui_os_arquivos_do_repositorio>

 

Setar propriedades em um projeto

svn propset copyright ‘<mensagem>’ svn://srvbuild/repos/sgiapi-testes

ou

svn propset <nome> -R <local_origem> <local_destino>

ou

svn propset <nome> -F <arquivo_origem> <local_destino>

 

*As propriedades devem ser setadas em uma cópia local, e realizar commit para efetivação no repositório.

 

Existem vários tipos de propriedades definidas pelo subversion que podem ser atribuidas aos projetos.

Ligações Externas (svn:externals)

 

As definições externas são um tipo especial de propriedades, que criam um link à arquivos em outro local no repositório. São um mapeamento de um diretório local para a URL.

 

Alguns comandos para trabalhar com definições externas:

 

 

Setar a propriedade svn:externals para uma cópia local

svn propset svn:externals “<nome_ligacao_externa> <url_repositorio>” <path_local>

svn commit *Para enviar as ligações externas ao repositório

 

Desta forma, é criado um link à pasta <url_repositorio> dentro do <path_local> fazendo com que, após o commit, sem que se realize um checkout sobre o repositório, automaticamente se baixe os fontes referentes à definição externa. É bastante útil, caso possua uma API, ou libs que sejam necessários para vários projetos. Sendo que quando se realiza manutenção sobre a API ou sobre as libs, a mesma se aplica a todos os projetos que fazem dela uma definição externa.

Listar Ligações externas à um projeto

svn propget svn:externals <url_repositorio>

 

 

*Lembrando que os exemplos entre “<…>” deverão ser substituídos pelo caminho do arquivo ou diretório ou url.

 

 

Explore posts in the same categories: Tutoriais

Tags: , , , , ,

You can comment below, or link to this permanent URL from your own site.

11 Comments on “Tutorial Subversion”

  1. Andre Says:

    Parabéns, muito esclarecedor!

  2. Joe Schmo Says:

    Thanks for helping me to understand the concepts behind version control in a SVN environment!

  3. Guilherme Says:

    Muito bom mesmo. Excelente tutorial

  4. Cleber Ramos Says:

    Samuel, seu tutorial é bastante explicativo.

    Ajuda muito quem está começando a usar esta ferramenta.

    Abs

    Cleber

  5. Carlos Migliavacca Says:

    Dae Samuca!

    Mato a pau no tutorial ;)

    Falow!


  6. [...] Tutorial Subversion « Samuel FeitosaConceitos gerais, tudo explicado [...]

  7. Mário Mariani Says:

    Muito bom!! Parabéns.

    Só acho que está ao contrário o conceito de Trunk e Branch, sendo o Trunk o repositório principal, onde só vão pra ele os branchs de uma funcionalidade depois de testada.

    O Branch serve para o desenvolvimento de uma funcionalidade. Cada membro da equipe que estiver desenvolvendo uma funcionalidade cria um novo branch para si e quando a funcionalidade estiver pronta e testada ela é integrada ao Trunk.

    Abraços.

  8. trainsppotting Says:

    bom, muito bom, embora tenha apanhado para configurar no eclipse/ubuntu :)

    abs

  9. Tiago Says:

    Show de boa.
    Agora so colocar pra rodar();

  10. Klaus Laube Says:

    Cara… realmente, muito bom este teu tutorial!


  11. [...] sobre Subversion, encontrei esse tutorial do Samuel Feitosa que apresenta o Subversion sem frescuras. Até serve como um guia de referências [...]


Comment: