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!