Mercurial
Mercurial é um sistema de controle de versão distribuído de código aberto licenciado sob os termos da GNU General Public License Version 2. Desenvolvido principalmente em Python e em C, o Mercurial é referenciado várias vezes por hg, por conta do elemento químico Mercúrio. Teve sua primeira release em 2005, data próxima ao do sistema de controle de versão git. Em comparativos com outros controles de versão, demonstra bom nível de feature e performance, sendo melhor em determinados aspectos [1][2][3].
Instalação
[editar | editar código-fonte]Linux, Mac, BSD, e Solaris
[editar | editar código-fonte]# Debian/Ubuntu $ apt-get install mercurial # Fedora $ yum install mercurial # Gentoo $ emerge mercurial # Arch $ pacman -S mercurial # Mac OS (utilizando o gerenciador de pacotes homebrew) $ brew install mercurial # FreeBSD $ cd /usr/ports/devel/mercurial $ make install # Solaris 11 Express $ pkg install SUNWmercurial
Windows e Mac
[editar | editar código-fonte]O Mercurial pode ser baixado para Mac e Windows em: http://mercurial.selenic.com/downloads
Configuração
[editar | editar código-fonte]O Mercurial necessita de um usuário configurado para realizar commits. A melhor forma de realizar essa configuração é criando um arquivo chamado .hgrc no diretório Home do sue usuário (ou em %USERPROFILE%\Mercurial.ini caso se esteja no windows), contendo um conteúdo seguindo o seguinte exemplo:
[ui] username = Firstname Lastname <firstname.lastname@example.net>
Obs: substitua somente o conteúdo em negrito, mantendo os "<>" .
Com isso o Mercurial estará pronto para ser utilizado.
Utilização
[editar | editar código-fonte]O Mercurial é chamado usando-se o alias hg, em referência ao elemento químico mercúrio. Assim, todos os comandos do Mercurial devem ser iniciados por hg.
Para se saber qual a versão do Mercurial instalado, digite no prompt de comando:
hg version
O Mercurial trabalha com repositórios. Um repositório é um diretório que contém todos os arquivos de origem que desejamos monitorar, juntamente com o histórico de mudanças desses arquivos. Esse histórico de mudanças encontra-se num diretório oculto chamado .hg.
Para inicializar um repositório, basta digitar:
hg init nome_repositorio
Para adicionar um arquivo para ser monitorado:
hg add arquivo.extensao
No entanto o comando acima não conclui a operação, ainda é necessário confirmar a operação realizando um commit:
hg commit -m"Mensagem do Commit"
Caso não se use o parâmetro -m, será aberto um editor de texto para ser inserido uma mensagem de commit mais extensa e/ou elaborada.
Para clonar um repositório remoto basta utilizar o comando:
hg clone http://www.selenic.com/repo/hello my-hello
Obs: http://www.selenic.com/repo/hello pode ser substituído por qualquer repositório compatível com Mercurial (a forge BitBucket é compatível), e my-hello pode ser subsituído por qualquer nome que deseja-se (caso esse parâmetro não seja passado, o nome será o default do projeto).
Para visualizar o histórico de modificações, utilize o comando dentro do repositório:
hg log
Obs: usando o parâmetro --graph será exibido um gráfico em ASCII do histórico de versão, muito útil para verificar a working tree.
Para ver o status do repositório, utilize o comando:
hg status
Obs: O comando hg status -A mostrará todos os arquivos inclusive os que não sofreram alterações (que não são mostrados por default). Caso haja modificações, será apresentado os nomes dos arquivos modificados junto com uma letra descrevendo o status do arquivo:
- 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
Para mostrar a diferença entre dois commits, use:
hg diff -r0 -r3
Obs: substitua o 1 e o 3 pelas versões dos commits que se deseja comparar. Diferente do Git, todo commit recebe um id único inteiro que vai de 0 à n, sendo o valor 0 dado ao commit mais antigo.
Para mostrar a diferença entre um arquivo modificado com a ultima versão desse arquivo, basta usar:
hg diff nome_arquivo
Para realizar um pull usa-se:
hg pull repositorio_destino
Embora o pull atualize o histórico de mudanças do repositório, ele não atualiza os arquivos com as novas modificações em si. Para realizar essa atualização é necessário usar o comando:
hg update
Para realizar um push usa-se:
hg push repositorio_destino
Há dois comando importantes que podem ser utilizados antes de se realizar um pull ou um push. São os comandos:
hg incoming
hg outgoing
A primeira verifica as modificações que serão incluídas ao se realizar o pull, enquanto a segunda verifica as modificações que serão submetidas ao se realizar o push.
Para realizar um merge, utiliza-se o comando:
hg merge repositorio_destino
No entanto as modificações não são concretizadas até realizar o commit.
Abreviações de Comandos
[editar | editar código-fonte]Abreviações pré-definidas
[editar | editar código-fonte]- hg st = hg status
- hg ci = hg commit
- hg cp = hg copy
- hg rm = hg remove
- hg mv = hr rename/move
- hg sum = hg summary
- hg up = hg update
Abreviações automáticas
[editar | editar código-fonte]O Mercurial permite abreviar comandos desde que a sequência de caracteres digitado não seja ambígua. Assim o comando hg verify pode ser escrito como:
- hg verify
- hg verif
- hg veri
A abreviação hg ver só não é permitida por entrar em conflito com o comando hg version que poderia ter a mesma abreviação. Sendo assim, o Mercurial permite abreviações intuitivas de qualquer comando.
Comandos Mercurial vs Git
[editar | editar código-fonte]Git | Mercurial |
---|---|
git pull | hg pull -u |
git fetch | hg pull |
git reset --hard | hg update -C |
git revert <commit> | hg backout <cset> |
git add <new_file> | hg add <new_file> (Only equivalent when <new_file> is not tracked.) |
git add <file> | Not necessary in Mercurial. |
git reset | Not necessary in Mercurial. |
git add -i | hg record |
git commit -a | hg commit |
git commit --amend | hg commit --amend |
git blame | hg blame or hg annotate |
git blame -C | (closest equivalent): hg grep --all |
git bisect | hg bisect |
git rebase --interactive | hg histedit <base cset> (Requires the HisteditExtension.) |
git stash | hg shelve (Requires the ShelveExtension or the AtticExtension.) |
git merge | hg merge |
git cherry-pick <commit> | hg graft <cset> |
git rebase <upstream> | hg rebase -d <cset> (Requires the RebaseExtension.) |
git format-patch <commits> and git send-mail | hg email -r <csets> (Requires the PatchbombExtension.) |
git am <mbox> | hg mimport -m <mbox> (Requires the MboxExtension and the MqExtension. Imports patches to mq.) |
git checkout HEAD | hg update |
git log -n | hg log --limit n |
git push | hg push |
Vantagens e Desvantagens
[editar | editar código-fonte]Vantagens
[editar | editar código-fonte]- Multiplataforma (Linux, BSD, Mac, Windows) [1]
- Fácil migração do git
- Interface nativa para interação e visualização dos commits
- Integração com outras ferramentas via plugins(Git, NetBeans, Emacs, etc)
- Diversas forges disponíveis
- Abreviação de comandos intuitiva e automática
- Suporte a plugins
- Log privativo
Desvantagens
[editar | editar código-fonte]- No geral, é mais lento que o Git [3] [4]
- Não é recomendável para certos perfis de projetos [4]
- Comunidade menos expressiva, já que o número de repositórios que utilizam Mercurial é menor em relação aos outros controles de versão [5]
Outros Sistemas de Controle de Versão
[editar | editar código-fonte]Sistemas de controle similares:
- Git
- Bazaar
Sistemas de controle sem uma arquitetura distribuída:
- Subversion
- CVS
Fontes
[editar | editar código-fonte]http://mercurial.selenic.com/wiki/
https://www.wikivs.com/wiki/Git_vs_Mercurial
https://code.google.com/p/support/wiki/DVCSAnalysis
- ↑ 1,0 1,1 https://code.google.com/p/support/wiki/DVCSAnalysis
- ↑ http://blogs.atlassian.com/2012/02/mercurial-vs-git-why-mercurial/
- ↑ 3,0 3,1 http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/#disadvantages
- ↑ 4,0 4,1 http://draketo.de/proj/hg-vs-git-server/test-results.html
- ↑ https://www.openhub.net/repositories/compare