2010-03-21 11 views
97

Esiste un modo migliore estrarre l'hash di revisione corrente in Mercurial diStampa hash Mercurial Revision Hash corrente?

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

?

Parte del mio script di distribuzione webapp "etichetta" il tarball dell'app caricato con il suo hash di revisione univoco.

+1

Si noti che 'hg log -l 1' fornisce il changeset più recente, non necessariamente quello a cui si è attualmente aggiornato!Il flag -f limita l'output del registro hg agli antenati della directory di lavoro corrente, quindi 'hg log -f -l1' è più vicino a ciò che si desidera. – waterproof

risposta

165

Prova:

hg id -i 

Esempio:

$ hg id -i 
adc56745e928 
+17

Nel caso in cui le persone non rispettino le soluzioni seguenti se si desidera utilizzare l'hash completo: 'hg --debug id -i' se si desidera che il supporto dei modelli usi' hg parent --template '{node}' 'Non utilizzare' hg log - l 1', è l'ultimo changeset del repository, non l'attuale working changes changeset. –

+7

L'uso di --debug in script non è raccomandato, quell'output è controllato con meno attenzione w/r/t retrocompatibilità. Usa il modello. Se vuoi farlo con w/log, usa il punto '.' come revisione. –

+0

Grazie a Ry4an non avevo idea di "-r". riferimento alla revisione della copia di lavoro corrente. Sembra che la mossa migliore passi da "log" a "parent". –

7
hg log -l 1 --template '{node|short}\n' 

Vedi the docs, paragrafi "le basi di template" e seguenti.

+2

Volevo quasi questo, ma con il lungo hash. Aliasing 'lid' per' log -l 1 --template '{node} \ n'' ha ottenuto esattamente questo - stampa l'ID di revisione completo. –

+6

Stampa il set di modifiche tirato più recente. La nostra directory di lavoro potrebbe essere aggiornata con un vecchio changeset. Per stampare il changeset al quale siamo aggiornati, usa "hg id". L'unico problema è che "hg id" non supporta i template né ha un'opzione per stampare hash lunghi (a meno che qualcuno non sappia come farlo). – Eiver

+1

Siccome Eiver ha detto che questo non stampa la revisione effettiva nella tua copia di lavoro solo l'ultima nel tuo repository. Poiché l'utilizzo di questa soluzione potrebbe introdurre errori di tracciamento, ho votato questa soluzione. –

35
hg --debug id -i 

Questa volontà di uscita lungo hash, con un vantaggio se ci sono modifiche non.

+0

Questo sembra essere il default in 3.1.2 – nickd

+1

Downvoting a causa di Ry4an [commento] (http://stackoverflow.com/questions/2485651/print-current-mercurial-revision-hash#comment14377031_2485923). –

16

È possibile utilizzare --template con il comando genitore, io uso questo per ottenere il lungo hash:

hg parent --template '{node}' 
+0

La pagina man hg dice 'hg parents' è [DEPRECATED] (https://www.selenic.com/mercurial/hg.1.html#parents), anche se forse potrebbe non essere stato il caso quando hai scritto questa risposta . Se c'è un'unione non vincolata, ci sono [due revisioni principali] (https://www.mercurial-scm.org/wiki/UnderstandingMercurial#line-157). –

+0

Qualcuno può dirci perché i genitori di hg sono deprecati e cosa dovremmo usare invece? – Vincent

12

Sintetizzando le risposte e le loro risposte, sembra che questo è il modo migliore per stampare il unica (non forma breve) identificatore della versione corrente :

hg log -l 1 --template '{node}\n' -r . 
+0

Nota se c'è un [unione non salvata] (https://www.mercurial-scm.org/wiki/UnderstandingMercurial#line-157), il '.' (punto) visualizza solo il [primo genitore] (https://www.selenic.com/hg/help/revisions) di due genitori del gruppo di lavoro. –

+0

Ti serve il '-l 1'? Sembra funzionare senza di essa. – aaaidan

2

il più specifico comando WHI non DEPRECATO ch a causa della presenza di --template in grado di stampare solo le informazioni di revisione se è necessario che concisione (come implica la domanda):

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

O per forma lunga unica di hash:

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

-b . o branch(.) (punto per nome ramo) means the current working directory branch e -r . indica la versione corrente della directory di lavoro, che è documented in hg help revsets a nd hg help revisions.

Nota se è presente uno uncommitted merge, lo . (punto) visualizza solo lo first parent di due genitori del gruppo di lavoro.

0

Come altri hanno sottolineato, non utilizzare log -l.

Utilizzare hg log -r . per ottenere informazioni dettagliate, invece di utilizzare hg id la cui uscita è limitata e non supporta i modelli. Puoi anche creare un alias come here = log -r . e utilizzare hg here. Se si desidera utilizzare l'hash solo hg log -r . --template '{node}\n'.