Gerência de Configuração de Software/Mercurial
Mercurial
[editar | editar código-fonte]O que é Mercurial?
[editar | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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:
- 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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]- Site oficial do Mercurial
- Wiki do Mercurial
- Goode, Durham; Agarwal, Siddharth. "Scaling Mercurial at Facebook". Facebook Code. Facebook.
- Wiki dos colegas Eduardo Vital e Dylan Guedes - 01.2015