quinta-feira, 9 de abril de 2009

Git e Mercurial

Bom, podem me chamar de nerd se quiserem, mas depois de ter anunciado o fato de que o código de Python iria ser gerenciado por Mercurial, não resisti e fui conferir(apesar de dizer que eu não iria, LoL) e apenas utilizando foi que pude entender porque Guido van Rossum escolheu este sistema.

Este artigo tem o objetivo de analisar dois sistemas de controle de versão, o Mercurial e o Git, nada muito profundo, mas sim, baseado em dois dias de prática utilizando estes dois sistemas de controle de versão.

Antes de iniciar é necessário falar sobre a questão do paradigma, tanto o Git e o Mercurial foram construídos para quebrar o formato de colaboração utilizado no CVS e SVN, nestes você utiliza um servidor centralizado, onde os commits são feitos todos neste servidor, isso acarreta um dos maiores problemas que esse tipo de sistema enfrenta: os chamados conflitos. Um conflito ocorre quando um desenvolvedor modifica a(s) mesma(s) linha que outro(s) e, a única forma de resolver isto, é se comunicando para que se possa chegar a um consenso e o conflito termine.

Em um projeto simples, em que dois ou três são responsáveis e enviam poucas modificações por dia, é fácil resolver os conflitos, mas imagine agora um projeto como o Kernel do Linux em que a todo momento vários desenvolvedores enviam modificações no código-fonte, com certeza deve ser algo extremamente complexo e penoso gerenciar a quantidade de conflitos que ocorrem a todo momento.

Foi pensando nisso que o próprio Linus Torvalds criou o Git, um sistema de controle de versões descentralizado com o objetivo de gerenciar o exemplo dado acima: o Kernel do Linux, ou seja, o seu próprio PC é o repositório ou um clone dele, neste você faz quantas e quantas modificações desejar e o commit é feito em seu próprio PC, então você sincroniza "puxando" os dados de um servidor e pode ver o que um outro desenvolvedor fez e verificar se o seu código é mais pertinente ou não, só ao fim de todo processo é que você "empurra" as modificações para um servidor central(se você quiser um servidor central, pois ele não é necessário) e o processo se repete. Óbvio que isto não elimina os conflitos, mas facilita a resolução, além disso, o servidor sofre menos carga, pois todos os dados estatísticos e database com informações e históricos são armazenados no repositório local.

O Mercurial e o Bazaar são baseados neste conceito distribuído, porém, construídos em Python, atualmente, o Bazaar está com a fama de lento, devido a isso, como expliquei anteriormente, foi um dos motivos alegados por Guido van Rossum para que este não fosse utilizado no gerenciamento do código da linguagem de programação Python.

Atualmente, grandes nomes do software livre, como Sourceforge.net e Berlios já atualizaram suas carteiras de controladores de versão e já contam com Git, Mercurial e Bazaar, além dos tradicionais CVS e SVN.

Minhas primeiras impressões sobre o Git, é que ele tem muito potencial a ser desenvolvido, a maior parte do trabalho é feita no modo texto e este tipo de trabalho, até o momento, é incentivado. No Windows, ele é mais amigável, há uma interface gráfica criada em TCL/TK muito pobre(óbvio), mas que quebra o galho daqueles que preferem algo mais intuitivo que digitar 666 comandos, se você usa Windows e se interessou pelo Git, pode baixar o msysgit, criar uma conta no github ou outro site que suporte esse sistema de controle de versões e testá-lo.

O Mercurial, não tive problemas, nem em Linux e nem em Windows, apesar de, assim como Git, ser possível escovar bits, o TortoiseHg torna a tarefa muito intuitiva, principalmente para aqueles que já utilizavam SVN, como eu, o princípio é basicamente o mesmo, o look & fell do TortoiseHg é torna a experiência semelhante à do TortoiseSVN, se você se interessou por Mercurial e usa Windows ou Linux, tanto faz, é interessante baixar o TortoiseHg e criar uma conta no bitbucket ou outro site que suporte esse sistema de controle de versões e testá-lo.

Concluíndo, a escolha de um sistema de controle de versões é algo que vai bastante da intuição, como o próprio Guido van Rossum afirmou, se você é um desenvolvedor que tem um projeto que toca sozinho ou com a ajuda de uns poucos colaboradores, a escolha de um sistema de controle de versões a dedo só o fará perder tempo, sinta-se livre para escolher o que achar melhor, este tipo de decisão só afeta mesmo grandes projetos.

Eu estou trabalhando com o Mercurial no momento porque gostei dele, é escrito em Python e é parecido com SVN, graças ao TortoiseHg, mas não faria diferença para mim trabalhar com Git ou SVN, no fim das contas essa é uma decisão pessoal e você tem liberdade de fazer a sua.

Nenhum comentário: