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:
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.
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.
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.
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”);
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);
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;
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”);
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);
7) Clicando em “OK”, o processo de “importação” do projeto ao repositório é feito e pode ser visto na figura 11;
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);
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);
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);
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);
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;
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);
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);
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);
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);
18) Confirmando as mudanças, uma nova versão será gerada (figura 21);
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;
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);
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.
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















Artigo muito bom. Parabéns, Eder!
Eder, boa tarde ! Brother preciso de um help… Vou começar a trabalhar com o VisualSVN juntamente com o TortoiseSVN, e possivelmente o plugin do visualsvn no visualstudio. Mas tem uma dúvida que não consigo resolver quanto ao visualsvn server… onde está o meu servidor svn… quando eu subo mais de 1 pasta (cada pasta contem um projeto visual studio)… o visualsvn incrementa +1 nas versões das pastas.. Exemplo: se eu subo 3 pastas… pela primeira vez… ele seta versão 1 na pasta do programa X, versão 2 na pasta do programa Y e versão 3 na pasta do programa… Leia mais »
Grande Eder, excelente artigo!
E ai Rinaldo! Muito obrigado! Valeu mesmo! 🙂