Wydrukować aktualny skrót wersji Mercurial?

124

Czy jest lepszy sposób na wyodrębnienie aktualnego skrótu wersji w Mercurial niż

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

?

Część mojego skryptu wdrażania aplikacji internetowej „oznacza” przesłane paczkę z aplikacją unikalnym skrótem wersji.

rentzsch
źródło
2
Zauważ, że hg log -l 1daje ci najnowszy zestaw zmian, niekoniecznie ten, do którego jesteś aktualnie aktualizowany! Flaga -f ogranicza wyjście dziennika hg do przodków bieżącego katalogu roboczego, więc hg log -f -l1jest bliżej tego, czego chcesz.
wodoodporny

Odpowiedzi:

196

Próbować:

hg id -i

Przykład:

$ hg id -i
adc56745e928
Ry4an Brase
źródło
22
W przypadku, gdy ludzie przegapią poniższe rozwiązania, jeśli chcesz użyć pełnego skrótu: hg --debug id -ijeśli chcesz obsługiwać szablon, użyj hg parent --template '{node}' Nie używaj hg log -l 1, jest to najnowszy zestaw zmian repozytorium, a nie bieżący zestaw zmian kopii roboczej.
Joseph Lisee
7
Używanie --debug w skryptach nie jest zalecane, ponieważ dane wyjściowe są mniej dokładnie kontrolowane w / r / t wstecznej kompatybilności. Użyj szablonu. Jeśli chcesz to zrobić w / log, użyj .kropki jako wersji.
Ry4an Brase
Dzięki Ry4an nie miałem pojęcia o „-r”. odwołując się do aktualnej wersji kopii roboczej. Wydaje się, że jest to lepsze posunięcie niż przejście z „dziennika” na „rodzic”.
Joseph Lisee
Nie ma problemu. hg help revisionsi hg help revsetsma takie szalone, potężne skróty.
Ry4an Brase
Ale nie jest to najbardziej szczegółowa odpowiedź na to pytanie, ponieważ afaik hg id -idrukuje tylko krótką (12 znaków) postać globalnego hash id, a ponieważ hg identifynie ma --templateafaics, nie ma sposobu, aby wyodrębnić tylko wersję i nic więcej, ponieważ strona podręcznika to mówi drukuje podsumowanie.
Shelby Moore III
41
hg --debug id -i

Spowoduje to wyświetlenie długiego skrótu, z plusem, jeśli są niezatwierdzone zmiany.

Szczery
źródło
Wydaje się, że jest to domyślne ustawienie w 3.1.2
nickd
1
Głosowanie przeciw z powodu komentarza Ry4ana .
Shelby Moore III
20

Możesz użyć --template z poleceniem nadrzędnym, używam tego, aby uzyskać długi hash:

hg parent --template '{node}'
pomiot cienia
źródło
Strona podręcznika hg mówi, że hg parentsjest WYCOFANE , chociaż być może tak nie było, kiedy pisałeś tę odpowiedź. W przypadku niezatwierdzonego scalenia istnieją dwie wersje nadrzędne .
Shelby Moore III
2
Czy ktoś może nam powiedzieć, dlaczego rodzice hg są przestarzali i czego powinniśmy zamiast tego używać?
Vincent
17

Podsumowując odpowiedzi i ich odpowiedzi, wydaje się, że jest to najlepszy sposób na wydrukowanie unikalnego (nie krótkiego) identyfikatora aktualnej wersji:

hg log -l 1 --template '{node}\n' -r .
rog
źródło
Zwróć uwagę, że jeśli występuje niezatwierdzone scalanie , .(kropka) wyświetla tylko pierwszego rodzica dwojga rodziców grupy roboczej.
Shelby Moore III
9
hg log -l 1 --template '{node|short}\n'

Zobacz dokumentację , akapity „Podstawy tworzenia szablonów” i następne.

Alex Martelli
źródło
2
Chciałem prawie tego, ale z długim haszyszem. Aliasing, lidaby log -l 1 --template '{node}\n'osiągnąć dokładnie to - wydrukuj pełny identyfikator wersji.
Michael Ekstrand
6
Spowoduje to wydrukowanie ostatniego pobranego zestawu zmian. Nasz katalog roboczy mógłby zostać zaktualizowany do starszego zestawu zmian. Aby wydrukować zestaw zmian, do którego jesteśmy zaktualizowani, użyj "hg id". Jedynym problemem jest to, że "hg id" nie obsługuje szablonów ani nie ma opcji drukowania długiego hasha (chyba, że ​​ktoś wie, jak to zrobić).
Eiver
1
Jak powiedział Eiver, to nie drukuje rzeczywistej wersji w twojej kopii roboczej, tylko ostatnią z twojego repozytorium. Ponieważ użycie tego rozwiązania może spowodować błędy śledzenia, przegłosowałem to rozwiązanie.
Joseph Lisee
1
Głosowanie w dół, podobnie jak Joe. Również @Eiver używaj, hg --debug id -ijak powiedziano w innym miejscu.
AJP,
3

Najbardziej specyficzne polecenie, które nie zostało WYCOFANE, które ze względu na obecność --templatemoże wydrukować tylko informacje o rewizji, jeśli taka zwięzłość jest wymagana (jak wynika z pytania):

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

Lub unikalna długa forma haszyszu:

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

Symbol -b .lub branch(.)(kropka przy nazwie gałęzi) oznacza bieżącą gałąź katalogu roboczego i -r .oznacza bieżącą wersję katalogu roboczego, która jest udokumentowana w hg help revsetsi hg help revisions.

Zwróć uwagę, że jeśli występuje niezatwierdzone scalanie , .(kropka) wyświetla tylko pierwszego rodzica dwojga rodziców grupy roboczej.

Shelby Moore III
źródło
3

Jak zauważyli inni, nie używaj log -l.

Służy hg log -r .do uzyskiwania szczegółowych informacji, w przeciwieństwie do używania, hg idktórego wyjście jest ograniczone i nie obsługuje szablonów. Możesz także utworzyć mały alias here = log -r .i użyć hg here. Jeśli chcesz tylko hash, użyj hg log -r . --template '{node}\n'.

Gru
źródło
1

W przypadku użycia TortoiseHg kliknij prawym przyciskiem myszy wiersz wersji w Środowisku roboczym i wybierz „Kopiuj hash” (zgodnie z dokumentacją ).

wprowadź opis obrazu tutaj

tekstowe
źródło