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.

42 Comentários em “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.

    • crbdigo Says:

      Concordo com o Mário Mariani, pois trabalho do modo citado neste artigo a uns 6 meses, e constato que este método é muito bom e eficaz para quando existe somente um desenvolvedor, quando há mais, este conceito pode ser descartado. Para concretizar a idéia do Mário (a correta segundo o tutorial do SVN) basta imaginar o seguinte cenário: Programador 1 implementa um cadastro de pessoas e dá commit no trunk, então gera um branch (versão pra teste), enquanto isso o Programador 2 faz um cadastro de curso, assim que acaba ele dá commit e gera outro branch. Daí então imagine que o que o programador 2 fez foi aprovado e deve ser publicado, porém o que o programador 1 fez não foi aprovado, aí já ferrou tudo, pois o branch do programador 2 tem as alterações do programador 1, logo não poderá ser publicada até ser tudo aprovado. Este é um exemplo simples de que este modelo com mais de um desenvolvedor não funcionará por muito tempo.

  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 […]

  12. Marcelo Says:

    Obrigado amigo sou analista de sistemas e migrei para o linux á pouco em definitivo, e seu tutorial foi muito esclarecedor para min.

  13. igor Says:

    Olá!Muito bom o tutorial, mas tenho uma dúvida se alguém puder me ajudar. Bom, possuo um servidor svnserve(OpenSUSE 11.1) que armazena um repositorio no qual desenvolvedores usam o tortoiseSVN(cliente windows) para acessá-lo, agora gostaria de saber se consigo pelo svnserve fazer uma comunicação da nossa rede com uma outra em ouro lugar, ou seja se alguém de outra rede tem como acessar nosso repositorio, sabendo que o servidor usado é o svnserve.Obrigado!

  14. Rafael Cabral Says:

    Bom dia, instalei o subversion no meu trabalho e esta funcionando uma maravilha, peguei algumas dicas postadas aqui para melhorar meu trabalho, mas não estou conseguindo saber quem atualizou o que dentro do meu subversion. Aonde estou errando para melhorar minha produtividade.

    • samuca Says:

      Rafael, para você verificar as alterações nos seus arquivos você pode utilizar a função “log” do SVN. Esta função irá quais arquivos sofreram modificações, dentre outras informações.
      Outra coisa interessante é a função “blame”, que irá mostrar o usuário responsável pela alteração linha a linha.
      Para utilizar esta função, basta executar a seguinte linha de comando:
      svn blame

  15. Fábio Augusto C. Bossa Says:

    Cara, meus parabéns! Depois de dias procurando, encontrei algo esclarecedor quando menos esperava. Parabéns, ficou muito bom!

    {}’s


  16. Muito legal Samuel, estava um pouco de duvidas como funcionava branches e tags.. esclareceu tudinho, Parabens!


  17. Era exatamente o que eu precisa para mostrar para um amigo iniciante. Obrigado!!

  18. wendel Says:

    Obrigado, bem útil, principalmente pra descobrir a versão certa do Asterisk a ser baixada.

  19. Marielle Says:

    Bom dia

    Gostaria de saber quais as linguagens de programação que o svn suporta.. alguém poderia me ajudar?

    Obrigada.

  20. Mauro Souza Says:

    Samuel, Boa tarde.
    Achei muito bom seu Tutorial.
    Gostaria de fazer uma pergunta.
    Você sabe dizer se para SVN existe alguma ferramenta similar ao que existe para CVS referênte a envio de emails de notificação (CVSSpam)?


  21. Parabens pelo tutorial, ficou realmente muito esclarecedor, me ajudou bastante..obrigado

  22. Marcelo Says:

    Tutorial claro e direto, sem enrolações. Parabéns!

  23. Elvis Says:

    Bom dia caso eu tenha setado o camando
    svnserve -d -r em um diretorio errado como faço para trocar o diretorio


  24. […] acessados através de SVN. Para quem não conhece o SVN, uma introdução pode ser encontrada em https://samuca.wordpress.com/2007/04/12/tutorial-subversion/, e a referência completa em […]

  25. JSitoe Says:

    Gostei muito do modo como aborda o Subversion.


  26. Samuca, preciso de ajuda para configurar o Subversion, podemos trocar email?

  27. Victor Says:

    Bom dia Samuel,
    Estro interessado em usar o SVN na empresa em que trabalho.
    Tenho algumas dúvidas:
    O CollabNet Subversion Edge 2.0.0 é Completo?
    O que ele permite fazer via interface gráfica?
    O que ele permite fazer via linha de comando (cmd ou Power Shell)?
    O CollabNet Subversion_CommandlLine_Client_v1.6.17 é completo?
    Existe interface gráfica ou é somente linha de comando?
    O que ele permite fazer na linha de comando( cmd ou Power Shell)?
    O TortoiseSVN-1.6.16.21511-win32-svn-1.6.17 é completo?
    O que ele permite fazer via interface gráfica?
    O que ele permite fazer na linha de comando?
    Grato,
    Victor Orr


  28. […] https://samuca.wordpress.com/2007/04/12/tutorial-subversion/ Share this:TwitterFacebookGostar disso:GostoSeja o primeiro a gostar disso post. CategoriasUncategorized Comentários (0) Trackbacks (0) Deixe um comentário Trackback […]


  29. Muito Bom este tutorial.
    Parabens!!!


  30. […] Os repositórios são importantes porque permitem que você crie um histórico de alterações e de versões dos seus scripts e rotinas que for trabalhar/criar/modificar. Além disso, ele vai lhe ajudar naquele momento em que você estiver escrevendo um relatório ou em que precisar lembrar de uma determinada data em que modificações ou implementações foram realizadas. Portanto, nessa primeira situação, pergunte a seus chefes, colegas, orientadores se o código com o qual você for trabalhar está em um repositório e em que tipo de repositório. Pergunte também se você pode criar um ramo (repositório) próprio para realizar os seus desenvolvimentos. Com certeza, essa é a melhor maneira de se iniciar o trabalho com códigos computacionais em sistemas e modelos. Para exemplos de utilização do svn, por exemplo (eu aprendi a trabalhar com o svn), leia este post sobre a criação de um repositório svn em sua máquina local (http://craftmind.wordpress.com/2011/04/25/criando-um-repositorio-svn-local/) e este sobre como utilizar o svn (https://samuca.wordpress.com/2007/04/12/tutorial-subversion/). […]

  31. Maycon Says:

    Valewwwww

  32. Felipe Guth Says:

    Obrigado e parabéns pela iniciativa, vai ajudar muita gente. att.


  33. My spouse and I stumbled over here from a different web address and thought I should check
    things out. I like what I see so now i’m following you. Look forward to looking into your web page repeatedly.

  34. Thales Lucena Says:

    Parabéns pelo tuto Samuel, tirou umas dúvidas que estava tendo. :D :D :D

  35. Alberto Says:

    Meus parabéns pelo tutorial, tenho a necessidade de criar um servidor de SVN, já criei e fiz a configuração e o servidor no linux Centos6 esta funcionado fiz alguns testes de acesso via Browser com usuários que eu criei na hora da instalação e os testes estão ok, fiz testes também com tortoise e deu certo, só que agora começam os problemas.
    Vamos as minhas duvidas, já existia um servidor antigo que deu problema, e ele usava uma pasta compartilhada do windows, com vários projetos, pelo que o pessoal me falou eles usavam a autenticação do próprio AD, e agora eu preciso dar um jeito de fazer eles acessarem esses projetos.
    Como ja mencionei eles usam no windows o cliente Tortoise para manipular os arquivos, e eu preciso por para funcionar de uma maneira semelhante a que eles estavam usando antes, como posso fazer isso.
    Quem puder me dar uma dica eu agradeço.

    Desde já agradeço a ajuda e atenção, muito obrigado.
    Att. Bispo

    • samuca Says:

      Olá Alberto, não sei se entendi bem a sua questão. Mas se vocês já utilizavam o SVN anteriormente, gerenciados através do Tortoise, independe de onde estavam fisicamente armazenados (seja no windows ou no linux). Seus usuários do repositório podem continuar fazendo uso do Tortoise para acessar seu repositório SVN sem problema nenhum. Você só vai precisar definir o modo de acesso a liberar para eles. Para isto, você pode utilizar várias alternativas, sendo pelas próprias configurações de usuários do SVN (geralmente usada quando se trata de acessos através de rede local), http, através de SVN+SSH, etc. Acredito que devem ter tutoriais explicando como proceder com a configuração de cada um testes tipos de acesso, bem como referente a formas de autenticação. De qualquer forma, fico a disposição para esclarecimentos.

  36. Rodrigo Says:

    Senhores, uma dúvida, nem sei se o SVN pode fazer isso, mas meu problema é o seguinte.

    Tenho um SVN na empresa (consultoria) e tenho um cliente que possui o SVN dele, em outro dominio
    Criei uma VPN com acesso o dominio dele e tenho um usuário adm do SVN dele.

    Gostaria de criar um branch no SVN do meu cliente sendo que esse Branch teria um link com o meu SVN, o meu SVN faria o controle da replicação onde todo log no SVN dele ficaria com um usuário X do dominio dele.
    E meu svn teria o log propriamente dito dos meus desenvolvedores.

    Outro ponto é que eu possuo integração com o jira e o svn dele não possui.

    Sabem me dizer ser isso é possível hoje?

  37. task Says:

    Ajudou bastante! Muito obrigado.

  38. Alisson Says:

    Estou tentando executar funções do SVN via linha de comando, porém, todo comando do SVN o terminal retorna erro assim: “SVN” Não é reconhecido como um comando interno.
    Todas as funções do SVN funcionam (VIA BOTÃO ESQUERDO)
    porém a linha de comando não.
    Baixei o SVN deste LINK: https://tortoisesvn.net/downloads.html

    A unica coisa que instalei foi a versão 32 bits que está no link.


Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s


%d blogueiros gostam disto: