Embora a maior parte do mundo pareça estar usando o git para controle de versão, a Mozilla continua a usar o Mercurial (hg
) para gerenciar o Código-fonte do Firefox. Como amante do git e do GitHub, demorei um pouco para me acostumar com o Mercurial. Não me considero um hg
mas sei o suficiente para concluir 99% das tarefas necessárias… que é provavelmente o quanto eu sei sobre o git. Apenas o suficiente para ser perigoso, eu acho.
Este post abordará algumas das tarefas que realizo frequentemente com o Mercurial.
Criar um commit com mensagem
O senhor pode adicionar -m
para adicionar a mensagem a partir da linha de comando em vez de digitar o VIM ou o editor desejado:
hg commit -m "Bug #### - This is the commit message"
Esse é o mesmo formato do git.
Importar um patch
O Mercurial permite que o senhor importe patches de arquivos locais e URLs:
# From local file hg import /path/to/code.patch # From URL hg import https://bugzilla.mozilla.org/attachment.cgi?id=32894.patch
Obter os últimos commits públicos
Os commits que o senhor faz localmente estão no status “draft”; os commits “públicos” são commits no repositório oficial. O senhor pode obter novos commits do repositório principal com pull
:
# Pull down new commits and check out latest hg pull && hg update --clean # Only checkout latest hg checkout "last(public())"
Excluir todos os arquivos não rastreados
O Mercurial gera .orig
quando o senhor reverte arquivos alterados, para o caso de precisar dessas alterações no futuro. Quando quiser se livrar de arquivos não rastreados, o senhor pode usar purge
:
hg purge
Rebase de um compromisso
O rebase
permite que o senhor forneça uma variedade de opções:
# Provide a source and destination revision (123 onto 200) # hg rebase -s <REV> -d <REV> hg rebase -s 12345 -d 12400 # Rebase the currently checked out revision onto a destination hg rebase -d 200 # Rebase onto the last public commit hg rebase -s 12345 -d 'last(public())`
Excluir um compromisso
Às vezes, o senhor precisa remover um commit:
# hg strip <REV> hg strip 12345
Fazer checkout de um commit que contém uma string de pesquisa
No caso de meu patch ser revisado e exigir atualizações, preciso encontrar o commit pelo número do bug que forneci na mensagem de commit:
# Format: hg checkout "grep(SEARCH STRING)" # Find the revision with message containing a search string hg checkout "grep(Bug 1565318)"
Criar e excluir marcadores
Os marcadores são o que mais se aproxima das ramificações do git: o senhor pode aplicar um rótulo de referência baseado em texto a um commit:
# Create a bookmark hg bookmark bug-12345 # Delete a bookmark -- doesn't delete commit hg bookmark -d bug-12345
Alterar o autor de um commit
De vez em quando, preciso puxar um patch do GitHub para o meu repositório Mozilla Central para fazer o commit, mas não quero roubar o crédito do patch brilhante de um colaborador.
hg commit -u "User Name <username@domain.com>" -m "The commit message"
Gerenciar histórico
O histedit
fornece uma listagem dos commits de um determinado pai e permite que o usuário edite as mensagens de commit, mescle commits, elimine commits, reordene commits e muito mais:
hg histedit
Na verdade, se o senhor aprender esses comandos, será capaz de fazer quase tudo o que precisa com o Mercurial. Eu sei que o Mercurial e o git são incrivelmente poderosos, mas o básico é tudo o que 99% dos desenvolvedores precisam!
Fique à vontade para fazer perguntas nesta postagem – adicionarei mais comandos à medida que as perguntas forem feitas!