Imprimir Hash de revisão mercurial atual?

124

Existe uma maneira melhor de extrair o hash de revisão atual no Mercurial do que

hg log -l1|grep changeset|cut -d: -f3

?

Parte do meu script de implantação do webapp "etiqueta" o tarball do aplicativo enviado com seu hash de revisão exclusivo.

rentzsch
fonte
2
Observe que hg log -l 1você fornece o conjunto de alterações mais recente, não necessariamente aquele para o qual você está atualizado no momento! O sinalizador -f limita a saída do log hg aos ancestrais do diretório de trabalho atual, portanto, hg log -f -l1está mais próximo do que você deseja.
waterproof

Respostas:

196

Experimentar:

hg id -i

Exemplo:

$ hg id -i
adc56745e928
Ry4an Brase
fonte
22
Caso as pessoas percam as soluções abaixo, se você desejar o uso completo do hash: hg --debug id -ise desejar o suporte ao modelo, use hg parent --template '{node}' Não use hg log -l 1, é o mais recente conjunto de alterações do repositório, não o conjunto de alterações atual da cópia de trabalho.
11118 Joseph Lisee
7
O uso de --debug em scripts não é recomendado; essa saída é controlada com menos cuidado com compatibilidade com versões anteriores. Use o modelo. Se você quiser fazer isso com o log, use .ponto como revisão.
Ry4an Brase
Graças Ry4an eu não tinha idéia sobre "-r". referenciando a revisão atual da cópia de trabalho. Essa parece ser a melhor jogada, em seguida, mudar de "log" para "parent".
Joseph Lisee
Sem problemas. hg help revisionse hg help revsetstem alguns atalhos poderosos e loucos como esse.
Ry4an Brase
Mas essa não é a resposta mais específica para a pergunta, porque o afaik hg id -iimprime apenas a forma abreviada (12 caracteres) do hash id global e, como hg identifycarece de --templateafaics, não há como extrair apenas a revisão e nada mais, já que a página de manual diz isso imprime um resumo.
Shelby Moore III
41
hg --debug id -i

Isso produzirá o hash longo, com uma vantagem se houver alterações não confirmadas.

Frank
fonte
Esse parece ser o padrão no 3.1.2
nickd
1
Voto negativo por causa do comentário do Ry4an .
Shelby Moore III
20

Você pode usar --template com o comando pai, eu uso isso para obter o hash longo:

hg parent --template '{node}'
sombrio
fonte
A página do manual hg diz hg parents: DEPRECATED , embora talvez esse não tenha sido o caso quando você escreveu esta resposta. Se houver uma mesclagem não confirmada, há duas revisões pai .
Shelby Moore III
2
Alguém pode nos dizer por que o hg parents está obsoleto e o que devemos usar?
Vincent Vincent
17

Resumindo as respostas e suas respostas, parece que esta é a melhor maneira de imprimir o identificador exclusivo (não abreviado) da versão atual :

hg log -l 1 --template '{node}\n' -r .
rog
fonte
Observe que se houver uma mesclagem não confirmada , o .(ponto) exibirá apenas o primeiro pai de dois pais do grupo de trabalho.
Shelby Moore III
9
hg log -l 1 --template '{node|short}\n'

Consulte os documentos , parágrafos "Noções básicas de modelos" e seguintes.

Alex Martelli
fonte
2
Eu queria quase isso, mas com o longo hash. Aliasing lidpara log -l 1 --template '{node}\n'conseguir exatamente isso - imprima o ID da revisão completa.
Michael Ekstrand
6
Isso imprime o conjunto de alterações extraído mais recente. Nosso diretório de trabalho pode ser atualizado para um conjunto de alterações mais antigo. Para imprimir o conjunto de alterações para o qual somos atualizados, use "hg id". O único problema é que "hg id" não suporta modelos nem tem uma opção para imprimir hash longo (a menos que alguém saiba como fazer isso).
eiver
1
Como Eiver disse, isso não imprime a revisão realmente em sua cópia de trabalho, apenas a mais recente em seu repositório. Como o uso desta solução pode introduzir erros de rastreamento, votei negativamente nesta solução.
Joseph Lisee
1
O mesmo vale para a votação de Joe. Também use o @Eiver hg --debug id -icomo é dito em outro lugar.
AJP
3

O comando não DEPRECATED mais específico que, devido à presença de, --templatepode imprimir apenas informações de revisão se essa concisão for necessária (conforme implícito na pergunta):

hg log -l 1 -b . -T '{rev}:{node|short}\n'

Ou para uma forma longa e exclusiva de hash:

hg log -l 1 -r . -T '{node}\n'

O -b .ou branch(.)(ponto para o nome da ramificação) significa a ramificação atual do diretório de trabalho e -r .a revisão atual do diretório de trabalho, documentada em hg help revsetse hg help revisions.

Observe que se houver uma mesclagem não confirmada , o .(ponto) exibirá apenas o primeiro pai de dois pais do grupo de trabalho.

Shelby Moore III
fonte
3

Como outros já apontaram, não use log -l.

Use hg log -r .para obter informações detalhadas, em vez de usar hg idcuja saída é limitada e não suporta modelos. Você também pode criar um pequeno apelido como here = log -r .e usar hg here. Se você deseja apenas o uso de hash hg log -r . --template '{node}\n'.

Gru
fonte
1

Caso o TortoiseHg seja usado, clique com o botão direito do mouse na linha de revisão no Workbench e selecione "Copy hash" (conforme a documentação ).

insira a descrição da imagem aqui

texnic
fonte