Posts Tagged ‘mercurial’

Controle de Mudança Distribuído é necessário?

February 9th, 2010

Controle de mudança distribuído (Distributed Bug Tracking – DBT)  parece ser um complemento natural para o controle de versão distribuído (DVCS – Distributed Version Control Systems); o desenvolvedor trabalharia de modo autônomo em seus tickets e depois sincronizaria com os outros desenvolvedores, da mesma forma que faz com o DVCS.

Projetos open source de DVCS começaram a aparecer em 2005 e vêm se tornando cada vez mais populares a cada dia, particularmente o Mercurial e o Git. Mas é curioso notar que não há nenhum projeto de DBT de renome, nem tem aparecido variações ou extensões de ferramentas centralizadas que as tornem distribuídas. Algumas tentativas de produzir um DBT não prosperaram; os projetos se encontram parados ou se tornaram apenas uma prova de conceito, sem conseguir grande aceitação:

  • Bugs Everywhere. Embora a página do projeto tenha sido revisada em 06/02/2010, o projeto parece abandonado, documentação inexistente e o link para o código fonte do projeto está quebrado (pelo menos no momento em que esse artigo está sendo escrito).
  • DisTract. Parado desde 2007.
  • DITrack. Abandonado em junho de 2008
  • Ditz. Parado desde novembro de 2008.
  • TicGit. Tem tido alguma atividade recente.
  • Fossil. Controle integrado de versão e de mudança distribuído. Não é baseado em nenhuma outra ferramenta distribuída já existente tal como o Mercurial. Vem sendo produzido ativamente.

Por que o Controle de Mudança Distribuído não Vingou?

O fato é que controle de versão é uma ferramenta para o programador, mas o controle de mudança é uma ferramenta para o projeto.

O controle de mudança tem o papel de aglutinar as necessidades do projeto, coordenar os esforços dos desenvolvedores e direcionar a evolução do projeto. É uma ferramenta de comunicação e colaboração entre desenvolvedores que funciona melhor de modo centralizado.

Imagine uma situação em que toda a equipe use um DBT. Cada desenvolvedor cria seus próprios tickets, páginas wiki, define milestones e organiza suas prioridades. Como juntar depois todas essas informações de uma maneira coerente para o projeto? Quem definiria as prioridades?

A facilidade de criar e editar tickets offline não compensa a complicação que um DBT introduziria no processo de desenvolvimento. Embora um DBT seja tecnicamente interessante, é uma aplicação procurando uma necessidade para preencher.

Acredito que o controle de versão vai caminhar para o modelo distribuído, mas o controle de mudança permanecerá centralizado.

Links Relacionados

Codeplex passa a usar Mercurial como controle de versão padrão

February 3rd, 2010

Codeplex é um portal da Microsoft para hospedagem de projetos open source, similar ao SourceForge e Google Code. Conforme anunciado, o Codeplex agora passa a suportar nativamente o Mercurial como controle de versão (a outra opção é o TeamSource, da própria Microsoft).

Entre os motivos apontados para a escolha do Mercurial, está a popularidade da ferramenta e o ótimo suporte ao Windows, o que é particularmente importante para o Codeplex, claro.

Sem entrar nos méritos da combinação Microsoft e open source, o fato é que o Mercurial vem sendo usado cada vez mais por provedores de hospedagem de projetos. Os próprios SourceForge e Google Code já oferecem suporte ao Mercurial.

Plugin do Mercurial para usar um servidor Git

August 18th, 2009

Um dos fatores do sucesso do Git é, sem dúvida alguma o GitHub: design elegante e funcional, gráficos interessantes etc.. Suponha que você deseje participar do GitHub ou mesmo usar algum projeto armazenado lá, só resta a opção de usar o Git, certo?

Não mais! Com o plugin do Mercurial Hg-Git seus problemas acabaram: você pode continuar usando o Mercurial mesmo que o repositório oficial do projeto esteja em Git! Do próprio site:

Este é o Hg-Git plugin para Mercurial, que adiciona a habilidade de push e pull de um repositório Git para um repositório Hg. Isto significa que pode-se colaborar em projetos baseados em Git a partir do Hg, ou usar um servidor Git como um ponto de colaboração de um time de desenvolvedores usando tanto o Git quanto o Hg.

O plugin foi desenvolvido pelo próprio pessoal do GitHub com o claro e justo intuito de aumentar o público-alvo dos seus serviços, mas amplia bastante as possibilidades de trabalho dos desenvolvedores e projetos que, tal como nós da Pronus, escolheram o Mercurial como DVCS.

Lançada a versão 1.3.1 do Mercurial e a versão 0.8.1 do TortoiseHg

July 24th, 2009

Nem faz tanto tempo que saiu a versão 1.3 e já lançaram a versão 1.3.1 do Mercurial. Esta versão chega com várias pequenas correções sobre a versão anterior. Entre elas, destacam-se:

  • consertado o uso excessivo de memória para operações de diff e strip
  • resolvido o problema de lentidão no cálculo de heads de ramos
  • resolvido o problema de lentidão na extensão fetch
  • update –check agora mostra vários ramos
  • Vários pequenas alterações na documentação e outros pequenos defeitos corrigidos

A lista completa de alterações está disponível neste link.

A atualização de versão é recomendada a todos os usuários. Para quem usa Linux e linha de comando, a melhor forma é usar o easy_install

sudo easy_install -U Mercurial

TortoiseHg 0.8.1

Para quem usa o TortoiseHg, saiu a versão 0.8.1 que já vem com a versão 1.3.1 do Mercurial. Sendo assim, basta instalar essa nova versão no Windows e pronto.

Há várias outras correções nessa versão. A lista completa está aqui. Uma das mudanças é a inclusão do livro do Mercurial em formato PDF no pacote.

Acaba de sair a versão 1.3 do Mercurial

July 3rd, 2009

Foi lançada a nova versão 1.3 do Mercurial. Chega com várias novidades, das quais destaco:

  1. Sub-repositórios (ainda em fase experimental) – Veja subseção abaixo
  2. Python 2.3 não é mais suportado. É necessário usar a versão entre a 2.4 e a 2.6
  3. Tradução para Português-Brasileiro
  4. merge: adicionada opção de preview -P/ –preview. Sempre bom saber qual o resultado vai dar antes de se comprometer com ele.
  5. update: adicionada opção -c/–check  para abortar atualização em caso de modificações locais pendentes.
  6. Extensão alias incorporada ao núcleo
  7. Extensão share (experimental)

Subrepositórios no Mercurial

A nova funcionalidade de subrepositórios segue a linha da propriedade svn:externals do Subversion. A idéia é permitir o uso de um repositório dentro de outro (fica sendo um subdiretório) e tratar todos como um só grupo.

As possibilidades são interessantes: é possível montar um projeto combinando partes formadas por projetos independentes.

Ao invés de propriedades, o mercurial usa um arquivo chamado .hgsub para registrar os subrepositórios. Só lembrando que arquivos que começam com ‘.’ são ocultos no Linux.

A criação e o registro dos subrepositórios ainda precisam ser feitos manualmente nesta versão que ainda é experimental. Entretanto, já estão previstas melhorias nesse sentido e também em manter subrepositórios não nativos, isto é, de outros sistemas tais como Subversion ou Git.

Extensão Alias

Alias era uma extensão à parte, mas agora é distribuída junto com o Mercurial. Mesmo assim, precisa ser habilitada no arquivo .hgrc do usuário para funcionar.

Permite a criação de “apelidos” para conjuntos de comandos e parâmetros usados com frequência. Por exemplo:

[extensions]
alias =

[alias]
llog = log --limit 10

A configuração acima cria um “novo” comando llog equivalente à execução do comando log --limit 10.

Extensão Share

Esta extensão permite criar — localmente — áreas de trabalho independentes que compartilham fisicamente o mesmo repositório (diretório store do .hg). A vantagem é que todos os commits feitos aparecem automaticamente no histórico dos repositórios compartilhados sem a necessidade de comandos de push ou pull.

É útil para a criação de uma área de trabalho para um ramo, por exemplo,  e não desperdiça espaço com um armazenamento do repositório interno.

Instalação da Versão 1.3

No Linux, é mais vantajoso usar o easy_install para obter a versão mais recente (easy_install -U Mercurial). A outra opção seria usar os pacotes da distribuição, mas essa alternativa costuma ser mais desatualizada.

No Windows, é possível utilizar o Mercurial 1.3, inclusive através da linha de comando, instalado diretamente o TortoiseHg 0.8. Interessante ressaltar que o TotoiseHg também funciona em plataformas não-Windows. Veja a página do TortoiseHg para mais informações.

Novo Curso de Gerência de Configuração com Trac e Mercurial

June 19th, 2009

Estão abertas as inscrições para o novo curso de Gerência de Configuração de Software com Trac e Mercurial. A grande novidade é o uso do Mercurial para o controle de versão distribuído.

Sobre o Mercurial

Mercurial é uma das mais populares ferramentas da nova geração de controle de versão distribuído. É usada por diversos projetos grandes tais como o OpenJDK (Java), NetBeans, Google Code, Python etc.

Possui um conjunto de comandos parecidos com o Subversion, o que facilita o seu aprendizado. Além disso, traz os diversos benefícios do modelo distribuído de controle de versão, tais como independência, rapidez e produtividade.

Sobre o Curso

O curso tem duração de 16 horas e, apesar de apresentar conceitos teóricos, é voltado para a parte prática de Gerência de Configuração, com diversos exemplos e exercícios de fixação do uso conjunto do Trac e do Mercurial para atender às necessidades do dia a dia do desenvolvimento de software e destaque aos novos fluxos de trabalho do modelo distribuído de controle de versão.

O curso também cobre a instalação e configuração do servidor do Trac e de um repositório “oficial” do Mercurial, tratando inclusive de alguns procedimentos de autorização, backup e restauração.

O programa completo está disponível na página do curso.

A próxima turma está marcada para os dias 17 e 18 de agosto em São Paulo.

Faça já sua inscrição e aproveite a promoção de lançamento até o dia 17 de julho (15% de desconto)!

Qual a melhor ferramenta de controle de versão: Subversion, Git ou Mercurial?

June 17th, 2009

Existem dois tipos de controle de versão: centralizado e o distribuído. O modelo distribuído é mais recente e possui algumas vantagens interessantes sobre o centralizado, embora seja um pouco mais complexo. Para as equipes que decidiram migrar para o distribuído ou mesmo permanecer com o centralizado, ainda resta a questão de qual a melhor ferramenta escolher.

Para aqueles que vão ficar no controle de versão centralizado, a decisão é bem simples: Subversion. Já é um padrão estabelecido, desbancando outros tais como CVS, Visual Source Safe, ClearCase etc. Não há realmente muito a acrescentar neste ponto.

O verdadeiro desafio está na escolha da ferramenta de controle de versão distribuído.

Filtragem Inicial

Existem muitas ferramentas de controle de versão distribuído. Para diminuir esse número inicial, vamos usar alguns critérios de filtragem inicial:

  1. Licença open source. Não há a menor necessidade de usar uma ferramenta proprietária para controle de versão. Aliás, as melhores são open source.
  2. Rodar em plataformas diferentes (Windows, Linux, etc.). A mesma ferramenta deve permitir que a equipe use a plataforma que quiser/precisar para trabalhar. Melhor ainda se houver uma interface gráfica tipo TortoiseSVN ou plugin para a IDE, mesmo que a linha de comando seja muito mais rápida e produtiva para a maioria das operações do controle de versão.
  3. Massa crítica de projetos já usando. Se vários projetos grandes usam a ferramenta é sinal de que ela já foi testada, avaliada e aceita por outros antes. Além disso, é mais provável que haverá uma comunidade ativa mantendo e desenvolvendo a ferramenta por muitos anos.

Depois de aplicados os critérios na lista, acabam restando praticamente o Git e o Mercurial. Talvez o Bazaar também pudesse ser incluído mas outros como Darcs, Monotone e SVK não passam no critério 3.

A seguir, alguns projetos conhecidos que usam o Mercurial ou o Git:

  • Mercurial: Google Code, Python, Java (OpenJDK), Mozilla, Netbeans (IDE), OpenSolaris  etc..
  • Git: Linux kernel, Perl, Samba, X.org Server, Qt, Ruby on Rails,  GNOME, Google Android, Btrfs da Oracle etc..

Aspectos Sociais na Escolha do DVCS

Critérios de desempate podem ser desempenho, funcionalidades, facilidade de uso, portabilidade, interfaces etc. O problema é que as análises comparativas entre o Mercurial e o Git têm mostrado muito mais semelhanças que diferenças entre os dois. Embora um ou outro tenha uma pequena vantagem em algum dos aspectos, não há diferença realmente significativa que justifique uma decisão baseado nisso.

Processos recentes tem usado outros fatores para o desempate tais como menor curva de aprendizado, suporte à plataforma Windows e preferência dos desenvolvedores para definir a escolha:

  1. A análise comparativa feita pelo Google Code entre o Mercurial e o Git considerou as duas alternativas bastante equilibradas. O Mercurial foi escolhido por ter um conjunto de comandos mais próximos do Subversion, o que facilita a transição dos desenvolvedores, e também por ter desempenho e adequação melhores ao serviço que o Google Code já oferece.
  2. Outro exemplo é o processo que levou o Python a também adotar o Mercurial (PEP 374 – Chosing a distributed VCS for the Python project). A análise comparativa entre Mercurial, Bazaar e Git apresentou alguns casos de uso, comparações de desempenho etc. mas, no final, o que pesou bastante foi o melhor suporte ao Windows, a preferência da comunidade de desenvolvedores pelo Mercurial e, é claro, o fato de o Mercurial ser escrito em Python.

Considerando funcionalidades e desempenho equivalentes, o que vai ser importante na escolha são as afinidades do Git ou Mercurial com as características do projeto/equipe/empresa. O desempate acabará sendo feito por critérios mais subjetivos tais como proximidade com outros projetos relacionados e preferência dos desenvolvedores.

Outros Projetos Relacionados

Projetos maiores que já usam o Mercurial ou o Git acabam atraindo projetos relacionados para o seu campo de influência.

A interferência direta se dá quando é necessário acompanhar ou mesmo participar de certos projetos externos associados com o projeto da equipe. A escolha da mesma ferramenta para todos torna o controle de versão muito mais fácil pois define um padrão homogêneo.

A tabela a seguir apresenta alguns projetos e qual a ferramenta que usam.

Projeto Git Mercurial
Google Android X
Google Code X
Pylons X
Python (linguagem) X
Ruby on Rails X
Sun (OpenJDK, NetBeans, OpenSolaris) X

Preferência dos Desenvolvedores

Esse é o critério mais passional de todos. O que leva um desenvolvedor a preferir uma ferramenta a outra varia desde a identificação com a filosofia do projeto até a preferência pelo logotipo do projeto. De qualquer modo, uma tendência clara da equipe por uma ferramenta específica deve ser pesado na decisão final.

Estudos de Caso

Projeto X Projeto Y Projeto Z
Escolha Final Mercurial Git Mercurial
Plataforma Windows Windows/Linux Linux
IDE/Interface Eclipse NetBeans linha de comando
Linguagem Principal Java Ruby Python
Projetos relacionados usam Subversion/Mercurial Git Subversion/Mercurial
Preferência dos Desenvolvedores - Git Mercurial

Considerações Finais

Git e Mercurial são ambas ótimas opções de controle de versão distribuído. A análise de um ou outro baseado em número de funcionalidades, forma de implementação interna, desempenho etc. acaba caindo em um tipo de discussão que abunda pelas listas de discussão na internet a fora e que gera muito calor e pouca luz!

Em termos práticos, ambas as ferramentas são muito parecidas e é mais fácil (e prático) escolher entre uma e outra com base na afinidade com o projeto/equipe.

É bom lembrar que  controle de versão é muito mais que instalar a ferramenta e sair usando. É necessária a capacitação dos desenvolvedores, a definição de um processo  de GCS em sintonia com as particularidades da ferramenta e também integração com uma ferramenta de controle de mudança (por exemplo, o Trac). Já pensando nisso, a Pronus Engenharia de Software lançará em breve o curso de Gerência de Configuração de Software com Trac e Mercurial.

Links Relacionados

  1. Comparação entre Git e Mercurial. Quadro comparativo entre principais características entre os dois. Alguns comentários interessantes também sobre portabilidade e interfaces disponíveis.
  2. Coleção de links comparando Git com outros controles de versão. Vários links, mas a maioria já bastante desatualizados.
  3. Comparação entre Git, Mercurial e Subversion.
  4. Why Git is better than X? Artigo interessante que analisa diversos pontos de Git com boas ilustrações de conceitos.
  5. Thread sobre Git x Mercurial. Exemplo de discussão interminável sobre aspectos técnicos de Git e Mercurial. Típico debate que gera muito calor e pouca luz.

Suporte ao Mercurial para Projetos Hospedados no Google Code

May 6th, 2009

Além do Subversion, a partir do dia 24/04/2009, o Google passou a oferecer o Mercurial como controle de versão para projetos hospedados no Google Code. Abaixo, há uma figura mostrando um exemplo de visualização do histórico de um projeto que usa o Mercurial já no Google Code.

A análise comparativa entre o Mercurial e o Git considerou as duas alternativas bastante equilibradas. A escolha pelo Mercurial se baseou em dois fatores:

  1. Os comandos e terminologia do Mercurial é mais próxima do Subversion, tornando mais fácil a migração da grande base de usuários que já usa o Subversion nos projetos do Google Code para o Mercurial;
  2. Mercurial apresentou desempenho e adequação melhores aos serviços baseados em HTTP que a infraestrutura do Google Code já oferece.