Tecnologia

Controle de versão de software: o porquê e como migrar de SVN para GIT



Quando falamos em desenvolvimento de software, estamos falando também de evolução. Os sistemas estão em constante aperfeiçoamento e, por isso, são criadas versões a cada atualização com melhorias ou mesmo correções de erros.

Um desafio para as empresas de TI é controlar o versionamento dos seus projetos. Isso porque, além do volume de alterações ao longo do tempo, diferentes desenvolvedores trabalham no mesmo projeto. O resultado disso é a necessidade de uma organização estruturada para se manter o controle e evitar erros.

Para esse cenário, existem as ferramentas de controle de versão. Elas registram a evolução dos projetos, auxiliam no gerenciamento das atividades em andamento e armazenam o histórico de códigos que, mesmo que não estejam sendo utilizados, podem vir a ser úteis posteriormente.

Entre as várias ferramentas desse tipo, estão o SVN e o GIT e é sobre elas que falaremos.

Por que migrar de SVN para GIT?

Aqui na Oobj, usávamos o SVN há vários anos. Porém, após conhecermos as vantagens do GIT, resolvemos fazer a migração. Entre os benefícios estão o aumento da segurança, facilidade de organização e praticidade no trabalho.

O SVN é uma ferramenta que armazena todos os projetos e suas versões  em um servidor único (centralizado). Ao atualizar algum código realizando o commit a alteração já vai direto para este servidor centralizado.

Já o GIT trabalha de forma diferente (distribuído). O trabalho com branches se torna mais simples, sem necessidade de criação de um novo diretório local e clone de todo o código para esse diretório. Ele também possui um passo a mais chamado push, utilizado caso deseje subir qualquer alteração realizada para o servidor.

Outro ponto importantíssimo é que, antes de mesclar qualquer atualização, é necessária uma solicitação de validação, chamada de pull-request. O GIT só irá colocar em produção commits previamente revisados. O pull-request demanda uma validação das alterações, não somente pelo desenvolvedor que a criou, mas por um segundo usuário. Isso garante que, pelo menos duas pessoas verifiquem a qualidade da atualização e a existência de erros, tornando o controle de versões bem mais seguro.

Foi com base nessas vantagens que vimos essa migração como a melhor opção. Porém, qualquer troca de sistema necessita de cuidado para que não haja perda de dados históricos pelo caminho. Tenho notado que essa perda é uma situação comum e que preocupa as empresas que decidem por essa migração. E é por isso que resolvi escrever esse artigo.

Vou mostrar abaixo como migrar um repositório robusto, com 10 anos no SVN para o GIT, mantendo todo o histórico de commits.




Fazendo a migração do SVN para GIT em 5 passos

Antes de tudo, o primeiro ponto a se atentar é utilizar o Linux para a migração do repositório. Através dele, é possível seguir com as etapas:


1º Configuração do ambiente

O script de migração para se utilizar é o disponibilizado pela Atlassian: svn-migration-scripts.jar. Também é necessário que o script do Java Runtime Environment, Git, Subversion e o utilitário git-svn estejam instalados.

Para verificar se está tudo correto, abra um prompt de comando e execute o seguinte comando:

java -jar ~/svn-migration-scripts.jar verify



2º Criação do arquivo authors.txt

No SVN,  os usuários são identificados apenas pelo nome do usuário <nome.sobrenome>, já no GIT temos o nome de usuário e também o e-mail <nome sobrenome, nome@mail.com>. Portanto, é necessário  criar um arquivo que chamaremos de authors.txt para realizarmos esse DE-PARA.

Execute o seguinte:

java -jar svn-migration-scripts.jar authors <URL repo SVN> > authors.txt



3º Realização do clone do repositório do SVN para o GIT

Quando falamos de SVN, devemos levar em consideração que cada um pode estar utilizando um padrão diferente. Ou seja, o padrão de repositórios como “ — trunk”, “ — fix” ou “ — prod”.

Se você utiliza algum desses padrões acima, durante o procedimento deverá usar o “— stdlayout” para realizar o clone.

Agora, se você utiliza um padrão diferente desses, é possível passar para o comando os parâmetros informando qual a nomenclatura do seu repositório, como por exemplo:

git svn clone –prefix=’’ –trunk=/<pasta relativa> –authors-file=authors.txt <URL repo SVN> <nome do novo repo git>

Nesse caso, a sugestão é  utilizar o “— prefix=’’ ” pois, se desejar atualizar este repositório futuramente, irá prevenir alguns problemas, porque o comando utilizado para realizar a atualização espera que exista esse prefix.

Execute o seguinte:

git svn clone –stdlayout –authors-file=authors.txt <URL repo SVN> <nome do novo repositório git>

Essa etapa pode demorar bastante tempo dependendo do tamanho do repositório, pois irá migrar revisão uma por uma para o GIT.



4º Limpeza do novo repositório criado, removendo .svn

Com a execução do SVN clone, algumas coisas são trazidas para o novo repositório GIT. Portanto, deve-se fazer a limpeza dentro desse novo repositório.

Execute o seguinte:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git

Esse comando irá apresentar tudo o que deve ser limpo. Depois, execute-o novamente com “— force” para remover:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git –force



5º Adicionar remote origin e realizar o push do repositório

Nessa etapa, é necessário executar este comando:  

git remote add origin https://URL.git

Após isso, execute o seguinte:

git push -u origin –all

Pronto! Está feita a migração do primeiro repositório SVN para o GIT.



Procedimentos Finais

Por fim, para fazer a atualização do repositório com as últimas alterações realizadas ainda no SVN, é preciso executar: 

git svn fetch

Para sincronizar as novas alterações buscadas no passo anterior, basta executar o comando:

java -Dfile.encoding=utf-8 -jar ~svn-migration-scripts.jar sync-rebase

Após ter feito isso, as novas atualizações irão aparecer. Assim, é preciso executar “git log” para confirmar.

Para finalizar, é necessário executar o 4º passo novamente e realizar o push das novas alterações buscadas.


Notas Técnicas e o gerenciamento de atividades

Se o seu negócio é o de Software House, o lançamento de Notas Técnicas pela Sefaz muito provavelmente é motivo de dor de cabeça. Aproveito então para compartilhar o modelo de trabalho que usamos na Oobj. Com ele, conseguimos organizar todas as etapas do processo, desde a entrada da NT, com a integração das equipes e criação das atividades iniciais, até o desenvolvimento, testes e implementação nos clientes.


CONHECER MODELO



Taynan Rezende é um dos responsáveis pelo desenvolvimento de produtos cada vez mais eficientes na Oobj. Ele acredita que praticidade e otimização constante são o segredo do sucesso para as empresas de tecnologia.


Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

WhatsApp