Subversion (TortoiseSVN) Tutorial

O que é o Subversion?

Subversion (SVN) é um software de controle de versões. Tem por objetivo permitir rastrear todas as alterações ocorridas nos arquivos armazenados por ele.

O cliente que estaremos usando para o Subversion é o TortoiseSVN, muito similar ao TortoiseCVS. O TortoiseSVN é open-source e pode ser obtido em http://www.tortoisesvn.org.

Este tutorial tem foco no cliente subversion. Se deseja mais informações sobre como instalar o “servidor”, por favor dê uma olhada nesse tutorial: Tutorial de Instalação do Subversion + SVN::Notify em Win32.

Gostaria muito de receber feedback sobre este tutorial: O que está fácil de entender, o que está difícil e qual outro tópico poderia ser melhor detalhado. Fiquem à vontade para inserir comentários (rodapé da página).

Operações do Subversion

Checkout

O conceito de checkout do SVN é exatamente o mesmo que o do CVS, porém para usuários do SourceSafe o conceito é diferente.

No SubVersion o Checkout significa a criação da cópia de trabalho (working copy) do repositório na máquina do desenvolvedor ou ainda “baixar” o código fonte do repositório.

Para realizarmos um checkout no nosso repositório, clicamos com o botão direito no Windows Explorer em cima do diretório onde o repositório será baixado, por exemplo C:\ME\SandBoxes\MEWeb e depois em SVN Checkout.

A URL do repositório é fornecida pelo administrador do repositório. Observe atentamente a diferenciação de maiúscula/minúscula no nome do repositório. Deve ser exatamente igual.

Em revision, mantenha “HEAD” revision. O outro caso é caso uma revisão específica seja desejada.

Clique em Ok, o TortoiseSVN irá pedir a autenticação do servidor. O usuário/senha deve ser fornecido pelo administrador do repositório. É recomendável ligar o “Save Authentication”, para que ele não fique solicitando a autenticação toda hora.

Se por alguma razão, desejar apagar as informações de autenticação, clique com o botão direito no Windows Explorer, depois TortoiseSVN, Settings e na tab General, clique em “Clear Now” à frente de “Subversion authentication data”.

Após finalizar o checkout, você observará um ícone verde exibido sobre o diretório. Isso indica que desde o último checkout ou update não houveram alterações no repositório.

Alterando arquivos

Os arquivos baixados pelo TortoiseSVN no diretório local ficam “alteráveis” (no Visual Source Safe ou em outros softwares de controle de versão geralmente eles ficavam Read Only).

Você pode alterar à vontade os arquivos dentro da sua Working Copy.

Nenhuma alteração vai para o repositório enquanto essas alterações acontecem.

Sempre que um arquivo é alterado, o TortoiseSVN visualmente indica em quais arquivos e diretórios recursivamente (do arquivo até o diretório principal do repositório) houveram alterações, com o ícone vermelho.

Commit

A operação de commit é a mais importante do SVN. O conceito é exatamente o mesmo em relação ao CVS. Já no SourceSafe a operação equivalente ao commit é o CheckIn.

Ela consiste em enviar as alterações realizadas na sua “Working Copy” (onde você baixou os fontes) para o repositório no servidor.

Toda e qualquer operação como alteração de arquivo, Add, Delete, Rename, Ignore não acontecem até que seja realizado um commit no repositório.

Assim como as demais operações do TortoiseSVN, elas podem ser executadas no diretório ou no arquivo. Caso seja executada no diretório, todos os arquivos e subdiretórios farão parte da mesma operação.

Quando é realizada a operação de commit, a seguinte tela é exibida:

Clicando-se em “Recent messages” pode-se obter mensagens anteriormente usadas em commits.

Na caixa de texto maior, abaixo de recent messages, devem ser adicionados comentários sobre as alterações realizadas no repositório. É muito importante que essas informações sejam inseridas. Através delas será possível rastrear as alterações.

Em changes made, são exibidos todos os arquivos que estão diferentes do repositório (inclusive arquivos não versionados, recentemente adicionados, excluídos, propriedades de diretórios modificadas, etc.).

Clicando em OK, as alterações são enviadas para o servidor.

Se entre o momento em que suas alterações foram realizadas outro usuário alterou algum dos arquivos e subiu as alterações para o repositório (commit), vc receberá a mensagem:

Nesse caso, realize um update na sua working copy e na seqüência realize um novo commit.

Update

O Update do TortoiseSVN significa pegar as alterações mais atuais do repositório e atualizar a Working Copy. A grande diferença é
que o TortoiseSVN nunca sobrescreve as suas alterações quando um update é realizado. No momento do update, o subversion detecta se houve um commit anterior no mesmo arquivo e faz um “merge” das alterações.

Para se realizar o update, clica-se com o botão direito sobre o arquivo ou diretório, depois em SVN Update. Caso seja selecionado um diretório, a operação é realizada recursivamente em todos os subdiretórios e arquivos.

Update normal, sem merge automático ou conflito

Caso não existam alterações na cópia de trabalho, ou as alterações realizadas na cópia de trabalho não sejam em arquivos que tiveram atualizações de outros usuários, o TortoiseSVN automaticamente os atualiza. Ex.:

Update com Merge

Caso existam alterações na cópia de trabalho, e também existirem atualizações nos mesmos arquivos alterados, o TortoiseSVN pode tomar duas ações:

Merge automático

Quando o TortoiseSVN detecta que os arquivos foram alterados em linhas diferentes. Ex.:

Conflito

Quando dois arquivos foram alterados exatamente no mesmo lugar. Essa é uma situação relativamente rara, porém pode acontecer na prática.

Quando uma situação de conflito acontece, o TortoiseSVN exibe o arquivo em conflito com o ícone amarelo e automaticamente tira backups dos arquivos, com as extensões:

  • teste.txt.mine: A versão da working copy, sem qualquer alteração
  • teste.txt.r6: A versão da revisão 6, anterior ao update
  • teste.txt.r7: A versão da revisão 7, revisão posterior ao update.

No caso de conflito deve-se clicar com o botão direito e “Resolve conflicts”. Isso dispara automaticamente a ferramenta de Merge. É possível usar a ferramenta de Merge default do TortoiseSVN ou alguma outra externa. Isso pode modificar a forma de se resolver os conflitos.

Na ferramenta TortoiseMerge, as alterações são automaticamente salvas no arquivo alterado (ex.: teste.txt). Na ferramenta Araxis Merge, ao editar os conflitos, o arquivo editado é sempre o .mine (ex.: teste.txt.mine), ou seja na hora de “resolver” o conflito, deve-se usar a opção “Resolve conflicts using .mine”.

É recomendável conversar com o desenvolvedor que realizou a alteração anterior caso existam dúvidas sobre a lógica de programação envolvida no código.

Após a resolução do conflito, nenhuma versão é subida para o servidor. O arquivo fica como “alterado” na working copy. Caso deseje enviar as alterações para o servidor, deve-se realizar um “Commit”.

Show Log

Exibe o histórico de alterações do item selecionado. No caso do Subversion, é possível verificar alterações em propriedades dos arquivos e diretórios.

Diff

Diffs servem para comparar arquivos. Um comparador externo (Araxis Merge) pode ser configurado para realizar as comparações. Sempre que um arquivo está alterado no repositório e um diff é realizado, as alterações feitas são exibidas.

É possível realizar a comparação entre quaisquer versões dos arquivos, através do “Show Log”.

Adicionando Arquivos ou Diretórios

Sempre que um novo arquivo é jogado na Working Copy, por default ele fica como não versionado. Para fazer o TortoiseSVN “reconhecer” um arquivo como adicionado, deve-se clicar com o botão direito nele depois em TortoiseSVN | Add.

Quando o Add é realizado, o arquivo ainda não foi efetivamente para o repositório. Somente no próximo commit ele será enviado.

Removendo Arquivos ou Diretórios

Sempre que um arquivo é excluído da Working Copy, ele não foi removido do repositório. No próximo update, ele será novamente baixado do repositório.

Se desejar excluir efetivamente um arquivo ou diretório, deve-se clicar com o botão direito sobre ele, depois em TortoiseSVN depois em Delete.

Mesmo o arquivo “sumindo” da working copy, ele não foi efetivamente removido do repositório. Somente no próximo commit ele será efetivamente removido. Consultando em revisões anteriores (show log), o arquivo ainda existirá e poderá ser recuperado.

Ignorando Arquivos ou Diretórios

Alguns arquivos criados pela IDE as vezes servem apenas para controlar informações na máquina local, e não devem ser versionados.
Nessa categoria temos: .appdata, .suo, .pdb, entre outros. Binários que podem ser gerados através de fontes também não são bem-vindos, assim como código “gerado” a partir de outros artefatos.

Para que o TortoiseSVN não fique mais notificando alterações nesses arquivos ou diretórios, basta clicar com o botão direito sobre ele TortoiseSVN | Add to ignore list.

Para a alteração surtir efeito, deve ocorrer um commit no diretório (a informação de ignore é uma propriedade do diretório, diferentemente do .cvsignore do cvs).

Revert – Desprezando suas alterações

Caso você tenha realizado alterações em sua working copy e deseje desprezá-las, podemos usar o comando “Revert”, clicando com o botão direito, TortoiseSVN | Revert.

Como praticamente todos os comandos do TortoiseSVN ele pode ser aplicado somente num arquivo ou num diretório. No caso do diretório, ele irá recursivamente se aplicando em subdiretórios e arquivos.

Alterações significativas de conceitos do CVS para o SVN

  • Commit atômico: No caso do CVS, quando um “lote” de alterações seja commitado, caso ocorra um erro, ele não consegue dar um “rollback” em todo o commit. Os arquivos que foram parcialmente commitados são gravados no repositório. O Subversion não tem esse problema. Ou o commit acontece inteiro ou ele não acontece.
  • Número da revisão: No Subversion, o número da “revisão” é para o repositório todo. Caso um arquivo seja alterado, é gerado uma nova versão para o repositório inteiro. No CVS por sua vez, o número da revisão é do arquivo.
Advertisement

4 thoughts on “Subversion (TortoiseSVN) Tutorial

  1. Como eu faço para desassociar uma WorkCopy de um repositório???

    Ex: PC1\PastaA -> PC2\Repositorio

    1. Lucas,

      Tem duas saídas… você pode fazer um “export” do repositório, assim ele simplesmente exporta os fontes, ou você pode excluir todos os diretórios ocultos “.svn”.

      O Export é bem mais esperto.

      Abraço,

      Eric

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s