Skip to content

Referenciado por: Configurando o Beyond Compare no TortoiseSVN | Dicas Técnicas | Dicas para Programadores Fox | Roteiro de treinamento de novos programadores Delphi | Treinamento Novo Desenvolvedor | WinMerge |

O que é Subversion? ​

Subversion é um sistema de controle de versão livre/open-source, com objetivo de gerenciar arquivos e diretórios ao longo do tempo. Esses arquivos ficam armazenados em um repositório central sob o cuidado desse sistema. Esse repositório se parece muito com um servidor genérico de arquivos, exceto que todas as mudanças feitas em seu conteúdo são devidamente registradas. Além ter disponível a versão mais atual, o sistema permite recuperar versões antigas dos seus dados, examinar o histórico para saber que modificações foram feitas ou ainda, quem executou a alteração.

Operações do Subversion ​

Checkout ​

No Subversion, o comando Checkout tem como função a criação da cópia de trabalho (working copy) do repositório na máquina do desenvolvedor, com esse procedimento os fontes são copiados do servidor. Para isso, basta clicar com o botão direito no Windows Explorer em cima do diretório onde o repositório será baixado, por exemplo C:\Teste_Checkout\ e depois em SVN Checkout.

SUBVERSION CHECKOUT.JPG

Após finalizar o Checkout, observe que um ícone verde será 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).

Considerações: -Pode-se 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 apresentando um ícone vermelho. Veja abaixo.

SUBVERSION ALTERACAO.JPG

Commit ​

A operação "Commit" consiste em enviar as alterações realizadas na sua Working Copy (onde forma baixados os fontes) para o repositório no servidor.

Toda e qualquer operação como alteração arquivo, Add, Delete, Rename, Ignore não acontecem até que seja realizado um "Commit" no repositório. Sendo assim, como as demais operações do TortoiseSVN, essas 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 será exibida:

SUBVERSION COMMIT.JPG

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

Na caixa de texto maior, abaixo de recent messages, deve ser adicionada o número da tarefa, e se preciso, descrever 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.

Conflito de Arquivos ​

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), a seguinte mensagem será apresentada:

SUBVERSION CONFLICT.JPG

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 subrescreve 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.

SUBVERSION UPDATE.JPG

Update normal, sem merge automático ou conflito ​

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

SUBVERSION UPADATE NORMAL.JPG

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 executar duas ações:

  • Merge automático
  • Merge com Conflito
Merge automático ​

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

SUBVERSION MERGED.JPG

Merge com Conflito ​

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

SUBVERSION MERGED CONFLICT.JPG

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 é sobe para o servidor. O arquivo fica como "alterado" na working copy. Caso queira 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.

SUBVERSION SHOWLOG.JPG

Diff ​

Diffs servem para comparar arquivos. Um comparador externo (WinMerge) 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.

SUBVERSION DIFF.JPG

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

Revert ​

Caso tenha realizado alterações em sua working copy e queira desprezá-las, pode-se usar o comando "Revert", clicando com o botão direito, TortoiseSVN | Revert.

SUBVERSION MENU REVERT.JPG

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.

SUBVERSION REVERTED.JPG

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.

Otimizando o TortoiseSVN ​

Para melhor desempenho do servidor WTS, devemos utilizar o TortoiseSVN sem a função de icon overlay. Para isso, defina Status Cache como None. Maiores explicações podem ser encontradas na própria documentação do TortoiseSVN.

Veja como realizar isto nas imagens abaixo:

Tortoise otimizando1.JPGTortoise otimizando2.JPG

Resolvendo Problemas ​

  • Existe um bug que acontece no wts, esporadicamente, quando se faz um update e ocorre conflito, a interface fica "bugada" ao tentar fazer update/check for modifications.

Para resolver esse problema, deve-se acessar o prompt de comando e digitar o comando:

svn revert T:\Totali Commerce\Pasta --depth infinity

Ao executar esse comando, o conflito desaparece e é possível usar o SVN novamente.