Usando o Subversion

Leonardo Serra Maciel de Campos


            
          

Este documento é licenciado sobre a licença de Atribuição-Compartilhamento da Creative Commons. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-sa/2.0/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Histórico de Revisões
Revisão 0.1 2004-09-17 10:50:04 -0300 Leonardo Serra Maciel de Campos
Revisão 0.2 2004-09-20 12:06:23 -0300 Leonardo Serra Maciel de Campos
Revisão 0.3 2004-09-20 20:46:01 -0300 Leonardo Serra Maciel de Campos
Revisão 0.4 2004-09-20 23:03:09 -0300 Leonardo Serra Maciel de Campos
Revisão 0.5 2004-09-21 21:54:54 -0300 Leonardo Serra Maciel de Campos
Revisão 0.6 2004-09-22 00:05:11 -0300 Leonardo Serra Maciel de Campos
Revisão 0.7 2004-09-22 09:07:04 -0300 Leonardo Serra Maciel de Campos
Revisão 0.8 2004-09-27 23:50:53 -0300 Leonardo Serra Maciel de Campos
Revisão 0.9 2005-01-29 10:13:49 -0300 Leonardo Serra Maciel de Campos
Revisão 1.0 2005-02-20 17:50:52 -0300 Leonardo Serra Maciel de Campos

Resumo

Este documento visa ensinar como usar o Subversion para fazer controle de versão.


Índice

1. Introdução
1.1. O que é Subversion?
1.2. Controle de versões
2. Ambiente
3. Instalação
4. Configuração
5. Ciclo básico de trabalho
6. Comandos
7. Dicas
A. Colaboradores
Bibliografia
Glossário

1. Introdução

1.1. O que é Subversion?

O objetivo do projeto Subversion é construir um sistema de controle de versão que seja um substituto para o CVS. O Subversion é liberado sob a licença Apache/BSD-style.

1.2. Controle de versões

Com o controle de versões podemos gravar o histórico de todos os nossos arquivos. Por exemplo às vezes são criados problemas quando o logicial é modificado, e o programador pode detectar isto muito tempo depois da modificação, acarretando um problema grave para descobrir onde aconteceu tal falha. Com o controle de versões podemos restaurar facilmente as versões antigas para ver exatamente qual mudança gerou tal problema.

Poderíamos, é claro, guardar todas as versões de todos os arquivos que criamos sem a ajuda de uma ferramenta de controle de versão. Porém, além do desperdício de um espaço considerável em disco, o Subversion armazena todas as versões de uma forma inteligente, guardando apenas as diferenças entre as versões. O que é muito mais vantajoso.

Podemos realizar o controle de versão para todo tipo de arquivo. Não apenas para arquivos de codigo fonte, mas qualquer tipo de arquivo, incluindo arquivos binarios.

2. Ambiente

Será presumido que o seu sistema Debian GNU/Linux e o aptitude estão corretamente configurados.

Nota

Apesar da instalação ser para Debian GNU/Linux, os comandos são independentes do sistema operacional e dependentes apenas do Subversion estar instalado, assim apenas a seção de instalação se refere a Debian GNU/Linux.

Também estaremos acreditando que o seu servidor Subversion já se encontra instalado, configurado e rodando de maneira correta. Estaremos acessando o servidor Subversion pelo protocolo WebDAV/DeltaV, pois este é o método de acesso que mais recursos possui.

Nota

Apesar de estarmos utilizando o protocolo WebDAV/DeltaV para acessar o servidor Subverion existem outras maneiras de se realizar esta tarefa, para conhecer melhor estas maneiras é recomendado a leitura do livro sobre o Subversion.

A tabelo abaixo mostra as versões de cada logicial usado.

Tabela 1. Versão dos logiciais

Logicial Versão
Debian GNU/Linux Sarge
subversion 1.1.3-1

A tabelo abaixo mostra as principais características do ambiente onde foi feito esta documentação.

Tabela 2. Ambiente

Servidor Subversion svn.exemplo.com.br
Método de acesso ao repositório http://
Endereço para acesso ao repositório http://svn.exemplo.com.br/svn/
Servidor proxy proxy.exemplo.com.br
Porta do servidor proxy 3128

Nota

Usaremos palavras desta maneira para indicar substituição.

3. Instalação

Atenção

Execute a etapa de instalação como usuário root, as demais etapas não precisam ser realizadas pelo usuário root!

  1. É necessário instalar o pacote do cliente do Subversion, para isto execute:

    # aptitude install subversion

4. Configuração

  1. Podemos alterar nosso método de acesso de http:// para https://, assim as transações com o servidor serão criptografadas. Para criar uma copia local do repositório desta maneira, execute:

    $ svn checkout https://svn.exemplo.com.br/svn/

    Nota

    O Apache2 deve estar configurado para tratar conexões HTTPS.

    Atenção

    Caso o Apache2 esteja utilizando um certificado não assinado por uma certificadora autorizada será mostrada as informações do certificado e será necessário aceita-lo manualmente. Para isto responda t para aceitar temporariamente, a para aceitar definitivamente ou r para rejeitar definitivamente.

    A opção de aceitar definitivamente o certificado só existe caso as informações de autenticação estejam sendo gravadas, para mudar isto edite o arquivo em ~/.subversion/config e altere a seguinte linha de:

    store-auth-creds = no

    Para:

    store-auth-creds = yes

    Caso a linha não exista ou esteja comentada (começando com #), basta acrecentar ela dentro da seção [auth]

  2. Por padrão o cliente Subversion só irá pedir senha durante a primeira conexão com o servidor Subversion, pois o cliente do Subversion irá armazenar a senha e outras informações de autenticação em ~/.subversion/auth. Isto cria possíveis pontos de exploração do servidor Subversion, para mudar isto edite o arquivo em ~/.subversion/config e altere a seguinte linha de:

    store-passwords = yes

    Para:

    store-passwords = no

    Caso a linha não exista ou esteja comentada (começando com #), basta acrecentar ela dentro da seção [auth]

  3. Caso a conexão com o servidor Subversion seja atraves de um servidor proxy, edite o arquivo ~/.subversion/servers e acrescente as seguintes linhas:

    [global]
    http-proxy-host = proxy.exemplo.com.br
    http-proxy-port = 3128
    

    Nota

    Caso exista algum servidor Subversion que deva ser acessado sem servidor proxy, acrescente a linha abaixo ao arquivo dentro da seção [global], colocando cada servidor separado por virgula.

    http-proxy-exceptions = localhost, 192.168.0.1

5. Ciclo básico de trabalho

  1. Criar uma copia local do repositório:

    $ svn checkout http://svn.exemplo.com.br/svn/

    Atenção

    Esta etapa só é necessária ser executada uma vez.

  2. Atualizando a copia local do repositório:

    $ svn update
  3. Altere os arquivos através do seu editor predileto e/ou executando comandos de alteração da estrutura do repositório.

  4. Atualizando a copia local do repositório:

    $ svn update
  5. Enviando as alterações para o repositório:

    $ svn commit

6. Comandos

  • Criando uma copia local do repositório:

    $ svn checkout http://svn.exemplo.com.br/svn/

    Atenção

    Isto ira criar uma pasta chamada svn. Todos os outros comandos deverão ser executados dentro desta pasta.

  • Atualizar o repositório local:

    • Atualizando a copia local do repositório:

      $ svn update
    • Atualizando a copia local do repositório para a revisão 3:

      $ svn -r 3 update
    • Atualizando trem para a revisão 3 do repositório:

      $ svn -r 3 update trem
  • Alterando a estrutura do repositório:

    • Adicionando trem ao repositório:

      $ svn add trem

      Nota

      A adição de pasta é realizada no modo recursivo. Opcionalmente pode ser passado o parâmetro -N que tornara a adição não recursiva.

    • Removendo trem do repositório:

      $ svn delete trem

      Atenção

      A remoção de pasta é realizada no modo recursivo.

      Nota

      A remoção não deve ser feita através do comando rm, pois ela só será apagada após o envio das operações realizadas localmente para o repositório.

    • Criando uma copia de trem para coisa no repositório:

      $ svn copy trem coisa

      Nota

      A vantagem da utilização deste comando é que ele realiza a copia de trem para coisa através do tradicional utilitario cp e em seguencia realiza a adição de coisa ao repositório.

    • Alterando o nome de trem para coisa no repositório:

      $ svn move trem coisa

      Nota

      A vantagem da utilização deste comando é que ele move de trem para coisa através do tradicional utilitario mv, em seguencia realiza a adição de coisa ao repositório e a remoção de trem do repositório.

    • Criando a pasta trem no repositório:

      $ svn mkdir trem

      Nota

      A vantagem da utilização deste comando é que ele cria a pasta trem através do tradicional utilitario mkdir e em seguencia realiza a adição de trem ao repositório.

  • Monitoramento o repositório

    • Visualizar o estado de cada arquivo, comparando a copia local com as informações coletadas do repositório no servidor durante a ultima atualização:

      $ svn status
    • Visualizar informações sobre o repositório:

      $ svn info
    • Visualizar os relatórios das mudanças no repositório:

      $ svn log
    • Visualizar os relatórios das mudanças no repositório mostrando apenas as revisões de 3 a 7:

      $ svn -r 3:7 log
    • Visualizar as diferenças entre as revisões de 3 a 7 para trem do repositório:

      $ svn -r 3:7 diff trem
    • Visualizar trem da revisão 3 do repositório:

      $ svn -r 3 cat trem
    • Visualizar a estrutura do repositório da revisão 3:

      $ svn -r 3 list
  • Enviando as alterações para o repositório:

    • Envio simples:

      $ svn commit

      Nota

      Após a execução do comando será aberto o editor definido pelo variavel $EDITOR, dentro do editor é recomendado que seja feito um pequeno resumo de quais foram as alterações realizadas.

    • Envio simples somente das operações realizadas em trem:

      $ svn commit trem
    • Envio sem abrir o editor, usando parametro para o resumo:

      $ svn commit -m "Texto explicando as alterações realizadas"
    • Envio sem abrir o editor, usando o arquivo explicacao.txt para o resumo:

      $ svn commit -F explicacao.txt

      Atenção

      O arquivo explicacao.txt não deve fazer parte do repositório, pois isto pode causar um ciclo redundante!

7. Dicas

  1. O Subversion é seu amigo e irá lhe ajudar.

    • Quando houver alguma duvida sobre quais comandos existem, execute:

      $ svn help
    • Quando houver alguma duvida sobre algum comando, execute:

      $ svn help comando
  2. O Subversion permite que seja feito acesso direto ao repositório. A vantagem disto é que não é necessario possuir uma copia local do repositorio para rodar os comandos.

    $ svn mkdir http://svn.exemplo.com.br/svn/trem

    Nota

    Muitos comandos permitem o acesso direto ao repositório, através da ajuda do Subversion é possivel saber se um comando permite ou não isto!

    Atenção

    Alguns comandos ao realizarem acesso direto ao repositório, ao fim do comando realizam um commit imediato.

  3. Com o intuito de facilitar a utilização do Subversion, ele possui abreviações para seus comandos. Abaixo esta a tabela com estas abreviações.

    Tabela 3. Abreviações

    Comando Abreviação (ções)
    checkout co
    commit ci
    copy cp
    delete del, remove, rm
    diff di
    help ?, h
    list ls
    move mv, rename, ren
    status stat, st
    update up

A. Colaboradores

Bibliografia

Os seguintes sítios foram usados como base para a criação desta documentação

Sitio do projeto Subversion. http://subversion.tigris.org/.

Livro sobre o Subversion. http://svnbook.red-bean.com/.

Perguntas e respostas sobre o Subversion. http://subversion.tigris.org/project_faq.html.

Minicurso da Unicamp sobre CVS. http://www.ead.unicamp.br/minicurso/cvs/.

Glossário

Debian GNU/Linux

O Debian é um sistema operacional (SO) livre para seu computador. Um sistema operacional é um conjunto de programas básicos e utilitários que fazem seu computador funcionar. O Debian usa o kernel (núcleo de um sistema operacional), Linux, mas a maior parte das ferramentas do SO vêm do projeto GNU; daí o nome GNU/Linux.

Logicial

Conjunto de instruções lógicas. Na informática designa um conjunto de instruções lógicas e suas dependências, também conhecido como programa ou sistema de computador.

Esta palavra é pouco usada no Brasil, onde se usa muito a expressão "Software".

Origem: Wikipédia, a enciclopédia livre.