Gerência de Configuração de Software/Mercurial

Mercurial

editar

O que é Mercurial?

editar

O Mercurial é um moderno sistema de controle de versão sob a licença GNU General Public License 2. Ele foi desenhado para possuir uma alta performance e escalabilidade, alem de ser descentralizado, possibilitando o desenvolvimento colaborativo dos softwares que o utilizam.

História

editar

Matt Mackall é o criador e desenvolvedor principal. O primeiro anúncio do Mercurial foi em 19 de abril de 2005, alguns dias depois de Linus Torvalds ter iniciado um outro grande projeto chamado Git. Ambos os projetos são uma resposta ao BitKeeper, que era o sistema de controle de versão usado à época. A empresa Bitmover responsável pelo Bitkeeper havia a pouco lançado uma versão grátis desse sistema.

É nesse cenário que Mackall decide escrever o sistema distribuído de controle de versão para ser incorporado ao Kernel do Linux. Porém o sistema escolhido acaba sendo o Git em detrimentro do Mercurial. Ainda assim, o Mercurial é bastante utilizado agora por diversos projetos (veja tópico abaixo).

Dentro da cultura hacker, a disputa entre Git e Mercurial tem se tornado uma “guerra santa”. Perguntado em uma lista de discurssão sobre como o nome “Mercurial” foi escolhido, Matt respondeu (tradução livre):

“Logo após o seu primeiro lancçamento, eu li um artigo sobre um debate que estava acontecendo com respeito ao Bitkeeper que descreve Larry McVoy como mercúrio (pon conta da “insconstância”). Dado os muitos significados, a abriviação conveniente, e o bom ajuste do meu pré existente esquema de nomes (vi meu e-mail), o nome veio instantaneamente. Mercurial então é um nome em homenagem à Larry. Não sei se o mesmo com o Git.”

Principais Comandos

editar

Todos os comandos do Mercurial começam com “hg” por ser o simbolo do elemento mercúrio na tabela periódica.

Comando Signficado
hg init OU hg init <nome do projeto> Inicializa uma instancia local do mercurial.
hg pull Atualiza a branch atual com os dados servidor remoto.
hg branch <nome da branch> Cria uma nova branch.
hg update <nome da branch> Realiza a troca entre as branchs locais.
hg add OU hg add <nome do arquivo> Adiciona um novo arquivo para ser commtado.
hg commit Comita as mudanças realizadas no projeto
hg merge <nome da branch> Realiza o merge das branchs
hg status Mostra quais arquivos foram alterados, removidos, adicionados ou ignorados.

Dentre os principais está o hg status que da um feedback sobre as mudanças, sendo que uma vez adicionando um arquivo, o mercurial se encarrega de manter o traking das muanças desse arquivo, sendo assim desnecessária o uso do comando “hg add” toda vez que um arquivo é modificado. Então para não confundir o usuário, o Mercurial se utiliza de uma serie de simbolos que são mostrados quando um status é requerido:

 
Feedback comando hg status
  • M = arquivo modificado
  • A = adicionado para ser commitado
  • R = arquivo removido
  • C = arquivo sem alterações
  • ! = arquivo não-encontrado(removido por um comando externo ao Mercurial) mas ainda sendo monitorado
  • ? = arquivo não monitorado
  • I = arquivo ignorado

Demais Comandos

editar

Esses demais comandos e suas respectivas descrições foram transcritos do manual da própria ferramenta.

Comando Signficado
hg addremove adiciona arquivos novos e remove arquivos faltando
hg annotate mostra informação de revisão por linha para cada arquivo
hg archive cria um pacote não versionado contendo uma revisão do repositório
hg backout anula o efeito de uma revisão anterior
hg bisect busca revisões por subdivisão
hg bookmarks rastreia uma linha de desenvolvimento com marcadores móveis
hg branches lista os ramos nomeados do repositório
hg bundle cria um arquivo de changegroup (coleção de revisões)
hg cat mostra o conteúdo de um arquivo na revisão atual ou perdida
hg clone cria uma cópia de um repositóri existente
hg copy marca arquivos como copiados para a próxima consolidação
hg diff exibe um diff do repositório (ou arquivos selecionados)
hg export exibe o cabeçalho e diffs para uma ou mais revisões
hg forget esquece os arquivos especificados na próxima consolidação
hg graft copia mudanças de outros ramos para o ramo atual
hg grep procura por um padrão nos arquivos e revisões especificados
hg heads exibe cabeças de ramo
hg help exibe o texto de ajuda geral ou de um tópico pedido
hg identify identifica a cópia de trabalho ou revisão especificada
hg import importa um conjunto ordenado de patches
hg incoming mostra novas revisões encontradas na origem
hg locate localiza arquivos que casem com os padrões especificados
hg log mostra o histórico de revisões do repositório ou de arquivos
hg manifest mostra a revisão atual ou pedida do manifesto do projeto
hg outgoing mostra revisões não encontradas no destino
hg parents mostra os pais do diretório de trabalho ou da revisão
hg paths mostra apelidos de repositórios remotos
hg phase define ou mostra o nome da fase atual
hg push envia mudanças para o destino especificado
hg recover desfaz uma transação interrompida
hg remove remove os arquivos pedidos na próxima consolidação
hg rename renomeia arquivos; equivalente a uma cópia seguida de remoção
hg resolve refaz mesclagens e exibe ou muda o estado da mesclagem de arquivos
hg revert restaura arquivos para o estado correspondente a uma cópia de trabalho
hg root imprime o raiz (topo) do diretório de trabalho atual
hg serve inicia um servidor web auto-suficiente
hg showconfig exibe opções de configuração de todos os arquivos hgrc combinados
hg summary sumariza o estado do diretório de trabalho
hg tag adiciona uma ou mais etiquetas à revisão atual ou pedida
hg tags lista as etiquetas do repositório
hg unbundle aplica um ou mais arquivos de changegroup
hg verify verifica a integridade do repositório
hg version exibe versão e informação de copyright

Quem utiliza?

editar

São vários os softwares que utilizam do Mercurial(https://www.mercurial-scm.org/wiki/ProjectsUsingMercurial) segue os principais softwares:

  • Python
  • Mozzila
  • NetBeans
  • Nginx
  • OpenJDK

O Mercurial possui como uma de suas principais características a sua fácil customização, em um post no Facebook Code (https://code.facebook.com/posts/218678814984400/scaling-mercurial-at-facebook), um dos desenvolvedores do Facebook comenta sobre uma migração que foi feita em seus sistemas onde eles migraram de subversion para o Mercurial, o principal motivo dessa escolha foi a necessidade do Facebook de customizar a ferramenta.

Referências

editar