Definição
Em ambientes de desenvolvimento, é muito comum que vários programadores manipulem ao mesmo tempo determinado arquivo. O controle de versão auxilia justamente na eficiência deste fluxo de alterações visando o não extravio de dados. Este tipo de ferramenta atua ainda na mesclagem de códigos, como também na resolução de conflitos em casos de versões diferentes, podendo inclusive, desfazer uma alteração.
Software Colaborativo
Esta é a proposta de um controle de versão, oferecer um meio colaborativo que além de gerenciar o histórico, diga-se timeline, do desenvolvimento do projeto, mantenham as equipes seguras quanto à integridade de seus códigos-fontes. Essa capacidade de poder gerar versões sem dúvida é um modelo essencial ao escopo do projeto. Imagine a construção de uma casa. O comprador sem dúvida fica satisfeito na medida em que acompanha o processo de construção e pudesse dar sugestões de mudança. Agora comparamos isso ao desenvolvimento de um site. Quebramos esse site em etapas, e vamos gerando releases para testes, logo, damos feedback junto ao cliente para que ele consiga palpar seu produto final e evite retrocessos lá na frente. E o melhor, poder manter tudo arquivado e um ponto de restauração para eventuais necessidades.
Talvez seja por isso, e muitos outros motivos, que o controle de versão caiu tão bem na moda do desenvolvimento. Impossível imaginar um projeto sem qualquer controle de fluxo de informações e segurança em sua realização. Antigamente, víamos programadores frustrados com suas empresas, acessarem o tradicional FTP da empresa e remover tudo que haviam feito. Um prejuízo inestimável que hoje, é uma mera opção de risco. O gosto caiu ainda mais na moda em projetos open-sources, aqueles em que geralmente, os desenvolvedores voluntários se encontram em espaços intercontinentais.
Se tratando do cenário de softwares disponíveis, existem ferramentas gratuitas como o Subversion e o GIT, como também soluções proprietárias, tal como o SourceSafe. Em todos os casos, seu uso é extremamente simples e baseia se apenas em conceitos fundamentais para o versionamento de códigos, o resto, é meramente recurso adicional da ferramenta com que irá trabalhar. Vamos começar?
Figura 1 – Desenvolvimento colaborativo
Estrutura Funcional
O controle de versão é um servidor, que a partir de agora vamos passar a chamar de repositório. Os usuários deste repositório são clientes que se conectam e atualizam seus arquivos neste servidor, semelhante a um FTP. Toda estrutura é mantida neste repositório. Confira a seguir a estrutura lógica que deverá compor este repositório:
Trunk
O tronco é a raiz do desenvolvimento. É aqui que você encontrará a última versão do projeto da qual ainda está em desenvolvimento, portanto, considere-o como uma versão não estável e também um ponto de partida para o seu desenvolvimento. Na figura abaixo, temos uma seta contínua que representa o tempo de vida de um projeto e várias intervenções r, que seriam as revisões do projeto, ou seja, alterações.
Figura 2 – Checagens de revisões no trunk
Branches
São ramificações do tronco, ou como preferir, um braço. Amplamente usado em situações da qual é necessário dividir a linha de desenvolvimento de um projeto. Em termos práticos, é quando o programador separa uma parte do projeto da qual ele será responsável, e que posteriormente haverá um trabalho de análise para sua mesclagem. É adoto apenas em grandes projetos, já que envolve certo cuidado ao manipular branches.
Figura 3 – Desenvolvimento parcial através das branches
Tags
São releases do projeto. A partir do momento em que o tronco está apto a fornecer uma versão estável, geramos uma nova tag da qual ficará isolada e intocável a partir de então. O desenvolvimento no tronco não para, e assim damos continuidade ao ciclo.
Figura 4 – Liberação de versões do trunk
“Controlenês”
Vamos agora conhecer os termos mais utilizados na gestão desse controle de versão!
- Checkout: processo em que você realiza uma cópia do trunk para começar a trabalhar.
- Update: feito o checkout, todas as atualizações do projeto serão requisições de update.
- Commit: após concluir várias alterações, você as sincroniza com o repositório trunk.
- Add: criado um arquivo novo, você adiciona ao repositório.
- Rename: renomeia um arquivo do repositório.
- Delete: remove um arquivo do repositório.
- Revert: desfaz uma ação no repositório.
- Revision: aos especificar uma revisão, você volta no tempo.
- Lock: trava um arquivo para que ninguém consiga alterá-lo, apenas visualizá-lo.
- Unlock: destrava o arquivo para que todos voltem a manipulá-lo.
- Merge: processo em que um arquivo será mesclado com trechos de códigos. Porém, nem sempre um merge será possível. É o caso do conflito:
- Conflict: evento em que um arquivo apresenta duas versões extremamente diferentes.
A partir de um conflito, você terá duas opções a decidir:
- Resolve (theirs): aceita que a versão do repositório sobrescreva a sua.
- Resolve (mine): determina que a versão do repositório seja substituída.
E enfim, outras ações “supérfluas”:
- Log: verifica o histórico de commits realizados pelos desenvolvedores.
- Clean: após inconsistências de um conflito, talvez seja necessário limpar seu checkout.
Utilitários
Na teoria, para cada ação desejada você teria que realizar um comando no terminal. Entretanto, da mesma forma que todos utilizam clientes FTP para subir alterações em um servidor, também existem clientes de controle de versão. Vou apresentar as mais utilizadas das duas soluções open-source apresentadas logo no início do artigo.
Cliente free mais utilizado para controles de versão SVN. Acoplado ao shell do sistema operacional, você irá conseguir realizar todas as operações através do click direito. Integração transparente, dificilmente você encontrará problemas em sua utilização.
Por muitos anos o SVN substituiu o CVS, e agora o GIT tem tomado o lugar dos dois. Não é o foco de o artigo abordar a diferença de ambos, o que importa é que o mesmo projeto TortoiseSVN também criou sua versão para o GIT, e o melhor, também gratuito.
Considerações Finais
Durante o ano vim escrevendo sobre vários conceitos no mundo do desenvolvimento. Foram ao total, sete artigos abordando de forma expressa os maiores paradigmas na convivência de um analista programador. Espero realmente que estes artigos tenham lhe servidor na busca por mais informações, já que esse era o foco. Sou contra a ideologia que temos que dar tudo “mastigado”. O estudo é essencial e um fator diferencial na área da Tecnologia da Informação. A partir de agora, espero fechar este ciclo (enquanto não me vierem novas sugestões) e começar a escrever sobre desenvolvimento prático, em especial, gadgets e mashups. Vemos-nos por aqui colegas “brasigueses”, até mais!
One Response
ja utilizai bastante o Tortoise, eu compilava EAtena servidor de Rgnarok, e fazia quase o mesmo porem sem organização, ótima matéria parabéns,,,