Mercurial aposenta o Subversion (pelo menos pra mim)

Eu amo o Subversion em grande parte porque o meu primeiro gerenciador de versões foi o CVS. Ao entrar em contato com o CVS, a impressão que tinha é que era muito mais fácil simplesmente manter cópias dos meus arquivos a usar aquilo. Tudo era complicado, diria mais: feio.

Foi quando conheci o Subversion, e as coisas ficaram incrívelmente mais fáceis pra mim. E, desde então, venho usado o Subversion como meu principal sistema gerenciador de versões. Tem me atendido 70% das vezes e, devo confessar, não tenho muito o que reclamar. Poderia ficar com ele por anos ainda, até conhecer o Mercurial.

Na primeira vez que ouvi falar do Mercurial, fiquei curioso: “um sistema de gerenciamento de versões distribuido”. Que é isto? Como isto funciona? Pra que serve? Quais as vantagens? Se o modelo do Subversion já me atende tão bem, o que isto poderia me adicionar? E, devo confessar, deixei o Mercurial passar despercebido pela primeira vez.

Mas o mundo da muitas voltas e, pra minha surpresa, de repente estou eu trabalhando no ODF Easy, tentando dar minhas contribuições ao projeto ODFDOM e… no caso do projeto ODFDOM, é usado o Mercurial. Foi quando resolvi aprender a usá-lo de fato (e o Subversion foi pra fila do INSS).

Pra começar, o conceito de gerenciar versões de maneira distribuída é muito interessante. Ao contrário do que termos um servidor central, no qual se encontram todas as versões de nossos arquivos, no caso do Mercurial, todos os usuários do sistema possuem o repositório inteiro  em seus computadores.

Qual a vantagem? Simples: você não precisa estar conectado a uma rede para trabalhar com o gerenciamento de suas versões. O usuário do sistema não precisa lutar com uma conexão ruim ou um servidor que pifou. Como consequencia, em um projeto no qual diversas pessoas participam, a segurança é elevada. O servidor aonde seu repositório estava foi abduzido por alienígenas? Ok, basta copiar o repositório de outro participante do projeto para sua máquina. Simples assim. 

Então, o ideal agora é por a mão na massa. Para usar o Mercurial, obviamente, a primeira coisa que você precisa fazer consiste em instalá-lo em seu computador. No site oficial você poderá encontrar uma instalação para o seu sistema operacional. Dado que é feito em Python, há versões para todos (ou quase) os sistemas operacionais que oferecem suporte a esta linguagem.

Instalado o mercurial, podemos começar a trabalhar com o bicho. Para criar um repositório em sua máquina, na interface de linha de comando do seu sistema operacional, digite o comando

 

hg init [nome do repositório]
Exemplo:
hg init ODFEasy

 

Será criado um diretório com o nome do seu repositório relativo ao seu diretorio atual. Simples assim, e até agora, nada demais.

Deseja os arquivos presentes em outro repositório em seu computador? Na linha de comando, digite o seguinte comando:

 

hg clone [caminho para o repositório] [nome do repositório a ser criado que conterá os arquivos copiados]
Exemplo:
hg clone repositorioOrigem repositorioDestino
Buscando os arquivos que se encontrem em outro computador:
hg clone http://enderecoDoServidor:porta repositorioDestino

 

 Aqui você sentirá uma grande diferença em relação ao nosso aposentado amigo Subversion: performance. Mercurial é inacreditavelmente rápido. Quando vi que era feito em Python, minha mente preconceituosa pensou: “deve ser lento”. Ao utilizá-lo, no entanto, choque: é impressionantemente rápido. Só para ter uma idéia, baixei todo o repositório do projeto ODFEasy, usando uma rede wireless absurdamente lenta em menos de 5 segundos. Espanto! (o projeto ocupa atualmente algo em torno de uns 3/4 megas (incluindo alguns arquivos adicionais ainda não publicados)). Em um dado projeto no qual trabalho, leva no mínimo uma hora fazer um checkout de todo o seu conteúdo com o Subversion. Com o Mercurial, acredito que este tempo deva diminuir para algo em torno de uns 3 a 4 minutos (testarei um dia e postarei aqui o resultado).

Tal como pode ser visto no exemplo anterior, puxei os arquivos a partir de um servidor web. Que servidor foi este? O do próprio Mercurial! Ele já vem com um servidor web bem simples que você pode usar para compartilhar seus repositórios. Como iniciar um repositório? Simples também.

Estando no diretório que contém seu repositório, simplesmente digite o comando

 

hg serve

 

Boom! O sevidor já está em execução, operando por padrão na porta 8000 do seu computador. Qualquer computador da sua rede interna, que acessar o endereço http://enderecoDoServidor:8000 poderá navegar por todos os arquivos contidos no seu repositório, porém um aviso: este servidor não oferece ainda suporte a autenticação ou qualquer recurso de segurança, sendo assim, utilize-o pelo mínimo de tempo possível. Se quiser maior segurança, no entanto, é possível configurar o servidor Apache para trabalhar com o Mercurial. Problema resolvido.

Já tive inúmeros problemas ao iniciar um servidor do Subversion (mea culpa). Com o Mercurial, logo de cara, funcionou perfeitamente. Sem dúvidas, uma grata surpresa.

Como comitar seus arquivos no repositório?

 

hg commit 

 

estando no diretório que contém a sua working copy. E se você quiser enviar seus arquivos para outro repositório, em outro computador?

 

hg push [servidor ou repositório]

 

Quer passar para o seu repositório as mudanças feitas em outro?

 

hg pull [servidor ou repositório]

 

E agora, um detalhe bacana: o Netbeans oferece excelente suporte ao Mercurial, muito similar ao oferecido ao Subversion (e o Eclipse também!).

Por enquanto, esta tem sido a minha curta experiência com o Mercurial. Durará a excelente imagem? O tempo dirá. E quem virá a aposentar o Mercurial no futuro? Pelo que ouvi, possívelmente o git, mas ainda não tenho experiências com ele para compartilhar.

Será que em breve terei um post “Git aposenta o Mercurial”?

6 thoughts on “Mercurial aposenta o Subversion (pelo menos pra mim)

  1. Gostei do post, mas em relação a branch e baselines .. !
    qual a vantagem ?
    muito obrigado ! abraço

    Responda

    admin Reply:

    Oi Pira. Fico feliz que tenha gostado.

    Bom: com relação aos branchs, eles se tornam práticamente desnecessários, visto que cada um tem o seu próprio repositório no final das contas.

    Mas tirando isto, funciona basicamente da mesma forma que no svn. Só que com bem menos conflitos.

    Responda

  2. Gostei do post,

    Tem algum link que explica como usar ele com o netbeans?

    Responda

    admin Reply:

    Oi Marcio,

    no caso do Netbeans 6.5 e posterior, você não precisa fazer nada. Ele já vem com suporte nativo. Então você irá fazer exatamente como faria no subversion.

    É lindo o negócio.

    Responda

Leave a Reply

Your email address will not be published. Required fields are marked *