
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.