Stampa corrente Mercurial Revisione Hash?


124

Esiste un modo migliore per estrarre l'attuale hash di revisione in Mercurial rispetto a

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

?

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


2
Nota che hg log -l 1ti dà il changeset più recente, non necessariamente quello a cui sei 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.
impermeabile dal

Risposte:


196

Provare:

hg id -i

Esempio:

$ hg id -i
adc56745e928

22
Nel caso in cui le persone perdano le soluzioni seguenti se si desidera l'uso completo dell'hash: hg --debug id -ise si desidera il supporto del modello, utilizzare hg parent --template '{node}' Non utilizzare hg log -l 1, è il changeset del repository più recente, non il changeset della copia di lavoro corrente.
Joseph Lisee,

7
L'uso di --debug negli script non è raccomandato, l'output viene controllato con minore attenzione con la compatibilità con le versioni precedenti. Usa il modello. Se vuoi farlo con il log, usa il .punto come revisione.
Ry4an Brase,

Grazie Ry4an non avevo idea di "-r". riferendosi all'attuale revisione della copia di lavoro. Sembra la mossa migliore che passa da "log" a "parent".
Joseph Lisee,

Nessun problema. hg help revisionse hg help revsetsha alcune scorciatoie potenti e folli come quella.
Ry4an Brase,

Ma non è la risposta più specifica alla domanda, perché afaik hg id -istampa solo la forma breve (12 caratteri) dell'id hash globale e poiché hg identifymanca di --templateafaics non c'è modo di estrarre solo la revisione e nient'altro dal momento che la pagina man lo dice stampa un riepilogo.
Shelby Moore III,

41
hg --debug id -i

Questo produrrà l'hash lungo, con un vantaggio se ci sono cambiamenti non impegnati.


Quello sembra essere il default in 3.1.2
nickd

1
Downvoting a causa del commento di Ry4an .
Shelby Moore III,

20

Puoi usare --template con il comando parent, lo uso per ottenere l'hash lungo:

hg parent --template '{node}'

La pagina man di hg dice che hg parentsè deprecata , anche se forse non sarebbe stato così quando hai scritto questa risposta. In caso di unione senza commit, ci sono due revisioni principali .
Shelby Moore III,

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

17

Riassumendo le risposte e le loro risposte, sembra che questo sia il modo migliore per stampare l' identificatore univoco (non abbreviato) della versione corrente :

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

Nota se è presente un'unione senza commit , il .(punto) mostra solo il primo genitore di due genitori del gruppo di lavoro.
Shelby Moore III,

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

Vedi i documenti , i paragrafi "Le basi del templating" e seguenti.


2
Volevo quasi questo, ma con il lungo hash. Alias lidper log -l 1 --template '{node}\n'ottenere esattamente questo: stampare l'ID di revisione completo.
Michael Ekstrand,

6
In questo modo viene stampato il changeset pull più recente. La nostra directory di lavoro potrebbe essere aggiornata a un vecchio changeset. Per stampare il changeset a cui siamo aggiornati, usa "hg id". L'unico problema è che "hg id" non supporta i modelli né ha un'opzione per stampare l'hash lungo (a meno che qualcuno non sappia come farlo).
Eiver,

1
Come ha detto Eiver, questo non stampa la revisione effettiva nella tua copia di lavoro, ma solo l'ultima nel tuo repository. Poiché l'utilizzo di questa soluzione potrebbe introdurre errori di tracciamento, ho votato in giù questa soluzione.
Joseph Lisee,

1
Idem Joe sta effettuando il downvoting. Anche @Eiver usa hg --debug id -icome si dice altrove.
AJP,

3

Il comando non DEPRECATED più specifico che a causa della presenza di --templatepuò stampare solo le informazioni di revisione se tale concisione è richiesta (come implicito nella domanda):

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

O per un'unica forma lunga di hash:

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

L' -b .o branch(.)(dot per nome filiale) significa il ramo directory di lavoro corrente e -r .significa la revisione in corso directory di lavoro, che viene documentato in hg help revsetse hg help revisions.

Nota se è presente un'unione senza commit , il .(punto) mostra solo il primo genitore di due genitori del gruppo di lavoro.


3

Come altri hanno sottolineato, non usare log -l.

Utilizzare hg log -r .per ottenere informazioni dettagliate, anziché utilizzare il hg idcui output è limitato e non supporta i modelli. Puoi anche creare un piccolo alias come here = log -r .e utilizzare hg here. Se vuoi solo l'uso dell'hash hg log -r . --template '{node}\n'.


1

Se si utilizza TortoiseHg, fare clic con il tasto destro del mouse sulla riga di revisione nel Workbench e selezionare "Copia hash" (come da documentazione ).

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.