Controlando versões com o TortoiseSVN

Apresentação

 

TortoiseSVN é um software de controle de código fonte, controle de versão e controle de revisão para plataforma Windows e é de fácil uso. É baseado no Apache Subversion (SVN)® e fornece uma boa interface para o usuário para subversão.

 

É desenvolvido sobre a GPL (GNU General Public License - Licença Pública Geral GNU) e significa que é completamente livre para qualquer pessoa utilizar, incluindo em ambientes comerciais sem qualquer restrição. O código fonte é também livremente disponível, tanto que o usuário pode desenvolver sua própria versão se desejar.

 

Desde que não seja uma integração para IDEs específicas como o Visual Studio, Eclipse ou outros, poderá também ser usado com qualquer tipo de ferramenta de desenvolvimento que quiser e ainda suporta 40 idiomas.

 

 

Objetivo

 

O objetivo deste artigo é capacitar os profissionais de sistemas embarcados, engenheiros, desenvolvedores e programadores a utilizarem esta ferramenta de controle de versões, pois assim, eles terão total controle do que foi feito e do que está sendo de forma detalhada, além disso, ainda possibilita a condição de retorno de versões e outras funções.

 

 

Motivação

 

A motivação para a síntese deste artigo é o alto índice de profissionais que não utilizam qualquer ferramenta de controle de versão, seja o TortoiseSVN, Git, Mercurial e outras, ou seja, cerca de 258 profissionais (31% dos questionários respondidos na Pesquisa sobre o Mercado de Trabalho Brasileiro de Desenvolvimento de Sistemas Embarcados 2015) optam por fazer o próprio controle, podendo trazer problemas quando for necessário retroceder algum projeto ou outra situação.

 

Assim, espera-se que os frequentadores do portal Embarcados tenham conhecimento desse cenário e comecem a conhecer este recurso para auxiliar suas tarefas de projetos e reverter este alto índice.

 

Abaixo, o gráfico (figura 1) da pesquisa realizada pelo Embarcados que mostra os dados quanto ao uso dos software de controle de versões:

 

Uso de ferramentas de controle de versão.
Figura 1 - Uso de ferramentas de controle de versão.

 

 

TortoiseSVN - Conceitos sobre o controle de versões

 

Um sistema de controle de versões (ou sistema de controle de revisões) é um sistema que rastreia o incremento das versões (ou revisões) e, em alguns casos, diretórios durante o tempo. Claro que, meramente rastrear várias versões de arquivos do usuário não é muito interessante por si só, mas o que faz o sistema de controle de versão útil é o fato que ele permite que você explore as mudanças resultantes em cada versão.

 

 

TortoiseSVN - Um típico sistema cliente/servidor

 

O repositório é o núcleo do sistema de controle de versão, ou seja, é a central de armazenamento de dados do software/código fonte/versão a ser controlada. Normalmente ele armazena a informação na forma de “filesystem tree” (hierarquia de arquivos e diretórios).

 

Qualquer número de clientes conectados ao repositório poderão ler ou escrever nesses arquivos. Escrevendo dados, um cliente faz a informação ficar disponível para outros, enquanto que na leitura os clientes recebem informações de outros. Na figura 2 é ilustrada essa situação.

 

TortoiseSVN - Sistema cliente/servidor.
Figura 2 - Sistema cliente/servidor.

 

O repositório é um tipo de servidor e o que faz dele especial é: como os arquivos no repositório são modificados, o repositório contém cada versão daqueles arquivos. Quando um cliente lê dados do repositório, ele vê somente a última versão dos arquivos. Mas o que faz um cliente do controle de versão interessado é que ele também tem a habilidade de solicitar versões de estados anteriores dos arquivos do repositório.

  

Ressaltamos que esse repositório fica alocado em servidores e que os clientes se situam remotamente, configurando redes dos tipos LAN (Local Area Network), MAN (Metropolitan Are Network) ou até mesmo WAN (Wide Area Network).

 

Para mais detalhes sobre definições, leia o livro gratuito Version Control with Subversion.

 

 

Controlando uma versão com o TortoiseSVN

 

Conforme dito, o TortoiseSVN é uma ferramenta de uso livre por qualquer pessoa, assim faremos um exemplo de controle de versão do projeto “Pisca LED” apresentado em Primeiros passos com a Placa STM32F0 Discovery.

 

Para este exemplo, situaremos o repositório no mesmo local da cópia que será feita do projeto, ou seja, no mesmo PC, apenas para ilustrar seu funcionamento, e não se preocupe, a sistemática é a mesma se o repositório estivesse em um servidor na França ou qualquer lugar do planeta!

 

Assim, para dar sequência a este artigo, deve-se fazer o download da ferramenta neste link, escolhendo a versão do seu sistema operacional. Feito o download, o arquivo executável disponível poderá ser visto na figura 3.

 

TortoiseSVN - Arquivo executável.
Figura 3 - Arquivo executável.

 

Depois de executar o arquivo, informar o diretório de destino da ferramenta no qual será instalado e finalizar o processo, clicando com o botão direito do mouse na área de trabalho, por exemplo, onde novas opções poderão ser vistas, conforme a figura 4.

 

Opções do TortoiseSVN.
Figura 4 - Opções do TortoiseSVN.

 

Antes de mais nada, devemos conhecer alguns termos de fundamental importância usados pelo TortoiseSVN:

  • Import: é o processo de  copiar uma árvore de arquivos não versionados para o repositório. Não requer uma cópia do trabalho, e seus arquivos são imediatamente submetidos ao repositório;
  • Checkout: significa criar uma cópia local de um projeto alocado no repositório remotamente;
  • Update: atualiza o projeto local conforme a última versão do repositório;
  • Commit: este comando transmite suas modificações ao repositório onde, se eles forem aceitos, será criada a mais nova versão de tudo aquilo que foi modificado, assim, todos poderão ver seu trabalho também.

 

Com o projeto do “Pisca LED” já em mãos, ou seja, feito um projeto no Keil uVision e devidamente alocado em um diretório, conforme os procedimentos do artigo de referência citado, devemos proceder da seguinte forma:

 

1) Crie um diretório chamado “Repositório” em algum lugar do seu PC que mais for conveniente. Em seguida, clique com o botão direito no diretório “Repositório”, escolha a opção conforme a figura 5 (“Create repository here”);

 

TortoiseSVN - Definindo o diretório como repositório.
Figura 5 - Definindo o diretório como repositório.

 

2) Na sequência, poderá ser vista uma janela (figura 6) indicando a definição desta pasta como repositório (“The repository was successfully created”), além disso, questionando também se poderá criar a estrutura de subdiretório (trunk/branch/tags). Assim, clique em “Create folder structure” e logo será criada essa estrutura (figura 7);

 

 

TortoiseSVN - definido o repositório.
Figura 6 - Definido o repositório.

 

TortoiseSVN - estrutura trunk/branch/tags criada.
Figura 7 - Estrutura trunk/branch/tags criada.

 

3) Clique em “Start Repobrowser” para verificar os diretórios criados conforme figura 8. Nesta figura pode-se ver todos os diretórios mencionados e que serão úteis durante o processo de controle de versões;

 

TortoiseSVN - Subdiretórios criados.
Figura 8 - Subdiretórios criados.

 

4) Assim, finalize o processo clicando em “OK”;

 

5) Deste modo, basta agora importamos o projeto “Pisca LED” para o repositório, assim sendo, procure por este projeto, clique com o botão direito do mouse sobre a pasta em questão e escolha a opção conforme a figura 9 (“Import”);

 

 

TortoiseSVN - Importando o projeto “Pisca LED”.
Figura 9 - Importando o projeto “Pisca LED”.

 

6) Depois escolhido por importar o projeto, informe o endereço do subdiretório “trunk”, aonde ficará o projeto alvo sujeito a revisões (figura 10);

  

TortoiseSVN - Cópia do projeto em trunk.
Figura 10 - Cópia do projeto em trunk.

 

7) Clicando em “OK”, o processo de “importação” do projeto ao repositório é feito e pode ser visto na figura 11;

 

Importação concluída.
Figura 11 - Importação concluída.

 

8) Agora, iremos simular a cópia do projeto localmente, como se o repositório estivesse em um servidor. Assim, crie um diretório em qualquer lugar que quiser e nomeie-o como “Projeto_STM32F0Disco_Local”. Depois, clique sobre o diretório criado com o botão direito e escolha a opção “SVN Checkout…” (figura 12);

  

tortoisesvn checkout
Figura 12 - Cópia “local” do projeto.

 

9) Feito isto, será solicitado o endereço da URL do repositório e também o endereço do diretório de destino. Assim, informado as duas, clique em “OK” (figura 13);

  

tortoisesvn-checkout-diretorios
Figura 13 -  Checkout.

 

10) Na sequência, poderão ser vistos quais foram os arquivos adicionados no diretório “Projeto_STM32Disco_Local”, além de indicar que o processo foi finalizado (figura 14);

  

tortoisesvn-checkout-ok
Figura 14 - Concluído processo de cópia do repositório.

 

11) Depois de clicar em “OK”, o ícone do diretório “Projeto_STM32Disco_Local” conterá um desenho de um “check” em verde, isto significa que o conteúdo dele é o mesmo do repositório (figura 15);

 

tortoisesvn-checkout-icone
Figura 15 - Conteúdo igual ao do repositório.

 

12) Pronto! Cópia realizada com sucesso. Agora faremos algumas alterações no projeto do pisca para ver o comportamento do diretório local. Abra, o projeto do “Pisca_LED” e no arquivo fonte (main), faça as alterações conforme a figura 16 e compile o projeto;

 

13) Anteriormente, o código foi feito para que os LEDs piscassem alternadamente, agora com essa modificação, eles irão piscar juntos;

  

TorotoiseSVN - Alteração a ser feito no código da main.
Figura 16 - Alteração a ser feita no código da main.

 

14) Verifica-se que no ícone da pasta do projeto local, o sinal de “check” em verde desapareceu dando o lugar a um ponto de “exclamação” em vermelho (figura 17);

 

TortoiseSVN - Diretório modificado.
Figura 17 - Diretório modificado.

 

15) Esse sinal de “exclamação” significa que o projeto local foi alterado, cujo conteúdo é diferente do repositório, assim, teremos que atualizar o repositório realizando a seguinte ação: clique com o botão direito sobre a pasta local e escolha a opção “SVN Commit…” (figura 18);

 

tortoisesvn-commit
Figura 18 - SVN Commit.

 

16) Logo em seguida, uma nova janela será aberta, indicando quais os arquivos do projeto foram modificados e também a possibilidade de inserir uma descrição da modificação, assim documentando todas as revisões criadas (figura 19);

 

tortoisesvn-historico
Figura 19 - Arquivos modificados e histórico.

 

17) Antes de confirmar a entrega das modificações feitas para o repositório, clique duas vezes sobre o arquivo fonte alterado, neste caso, a "main". Assim uma nova janela será aberta indicando as diferenças entre a versão anterior e a atual (figura 20);

 

TortoiseSVN - Detalhes das alterações.
Figura 20 -  Detalhes das alterações.

 

18) Confirmando as mudanças, uma nova versão será gerada (figura 21);

  

tortoisesvn-nova-versao
Figura 21 - Nova versão.

 

19) Esse processo fará com que o repositório seja atualizado, contendo o mesmo projeto local, fazendo com que o ícone “check” em verde assuma novamente o lugar da “exclamação” em vermelho;

 

20) Agora vamos verificar os registros das versões gerenciado pelo TortoiseSVN. Assim, clique com o botão direito sobre o diretório “Projeto_STM32Disco_Local” e escolha a opção “Show log”. Logo será exibido as versões geradas até o momento, vide figura 22;

 

tortoisesvn-log
Figura 22 - Log.

 

22) Como qualquer outra ferramenta de controle de versões, pode-se retornar à versão original, e, para isto, escolha a versão que queira retornar na mesma janela da figura 22. Por exemplo, revisão 2, pois a primeira revisão foi a que criou os subdiretórios trunk, branch e tags. Clique com o botão direito na segunda revisão e escolha a opção “Revert to this version” (figura 23);

 

23) Assim, uma nova janela será aberta questionando a ação, confirme clicando em “Revert” (figura 24);

 

 

TortoiseSVN - Reversão do projeto.
Figura 23 - Reversão do projeto.

 

TortoiseSVN - Confirmação da reversão.
Figura 24 - Confirmação da reversão.

 

24) Confirmado o processo através da mensagem “Completed”, o código fonte foi revertido à situação original.

 

25) Assim, a imagem de "exclamação" em vermelho voltará, indicando que o projeto local está diferente do repositório. Assim, "commit" novamente.

 

Vale ressaltar também que todas as vezes que o profissional for iniciar suas atividades no projeto o qual utiliza o TortoiseSVN, deve-se fazer, primeiramente, o "update". Isto garante que o projeto seja atualizado conforme o repositório antes de ser modificado, evitando assim qualquer conflito. Clique com o botão direito sobre o diretório do projeto, vide figura 25.

 

tortoisesvn-update
Figura 25 - Update.

 

 

Conclusão

 

Utilizando o TortoiseSVN como ferramenta de controle de versão ou qualquer outra de mesma natureza, poderá controlar por completo todas as versões geradas, assim possibilitando analisar o que foi modificado por meio do histórico dos registros. Esta ferramenta traz muitos benefícios, o engenheiro/desenvolvedor precisa apenas gastar alguns minutos para aprender a manuseá-la e rapidamente estará apto a gerenciar todo seu projeto.

 

O exemplo abordado aqui aproveita um projeto já apresentado em outro artigo, o qual faz uso da IDE Keil uVision, porém a sistemática apresentada aqui também pode ser aplicada em simples arquivo fonte, se preferir. Ou seja, esse processo é totalmente genérico para qualquer linguagem, arquivo e IDE, além de ser Open Source.

 

 

Referências 

 

About TortoiseSVN 

Book - Version Control with Subversion

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

2
Deixe um comentário

avatar
 
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Eder AndradeRinaldo Câmara Gonçalves Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Rinaldo Câmara Gonçalves
Visitante
Rinaldo Câmara Gonçalves

Grande Eder, excelente artigo!