2010-03-21 3 views
97

Есть ли лучший способ извлечения текущего пересмотра хэш в Mercurial, чемПечать Текущий Mercurial Revision Hash?

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

?

Часть моего сценария развертывания webapp «теги» загруженного приложения tarball с его уникальным хешем изменения.

+1

Обратите внимание, что 'hg log -l 1' дает вам самый последний набор изменений, не обязательно тот, который вы сейчас обновляете!Флаг -f ограничивает вывод hg log предкам текущего рабочего каталога, поэтому 'hg log -f -l1' ближе к тому, что вы хотите. – waterproof

ответ

165

Попытка:

hg id -i 

Пример:

$ hg id -i 
adc56745e928 
+17

В случае, если люди пропустили нижеприведенные решения, если вы хотите использовать полный хеш: 'hg --debug id -i', если вы хотите, чтобы поддержка шаблонов использовала' hg parent --template '{node}' 'Не использовать' hg log - l 1', его последний набор изменений репозитория, а не текущий набор изменений рабочей копии. –

+7

Использование -debug в сценариях не рекомендуется, этот результат менее тщательно контролируется с обратной совместимостью w/r/t. Используйте шаблон. Если вы хотите сделать это w/log, используйте «.» В качестве ревизии. –

+0

Спасибо Ry4an Я не знал о «-r». ссылаясь на текущую редакцию рабочей копии. Это похоже на лучший ход, затем переход с «log» на «parent». –

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

См the docs, пунктов "Основы шаблонов" и следующие.

+2

Я хотел почти этого, но с длинным хешем. Сглаживание 'lid' до' log -l 1 -template '{node} \ n'' достигается именно таким образом - напечатайте полный идентификатор ревизии. –

+6

Это печатает самую последнюю вытащенную ревизию. Наш рабочий каталог может быть обновлен до более старого набора изменений. Чтобы напечатать обновленный набор изменений, используйте «hg id». Единственная проблема: «hg id» не поддерживает шаблоны и не имеет возможности печатать длинный хеш (если кто-то не знает, как это сделать). – Eiver

+1

Как сказал Eiver, это не печатает фактически ревизию в вашей рабочей копии только последнюю в вашем репозитории. Поскольку использование этого решения может привести к ошибкам отслеживания, я решил проголосовать за это решение. –

35
hg --debug id -i 

Это будет выводить длинный хэш, с плюсом, если существуют незафиксированные изменения.

+0

Это похоже на значение по умолчанию в 3.1.2 – nickd

+1

Downvoting из-за Ry4an's [комментарий] (http://stackoverflow.com/questions/2485651/print-current-mercurial-revision-hash#comment14377031_2485923). –

16

Вы можете использовать --template с родительской командой, я использую это, чтобы получить длинный хэш:

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

На странице hg man говорится, что 'hg parents' [DEPRECATED] (https://www.selenic.com/mercurial/hg.1.html#parents), хотя, возможно, это могло быть не так, когда вы написали этот ответ , Если есть uncommitted merge, есть [две родительские версии] (https://www.mercurial-scm.org/wiki/UnderstandingMercurial#line-157). –

+0

Может кто-нибудь сказать нам, почему родители hg устарели и что мы должны использовать вместо этого? – Vincent

12

Подводя итоги ответы и их ответы, то кажется, что это лучший способ напечатать уникальный (не короткая форма) идентификатор версии в тока:

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

Обратите внимание, что если существует [uncommitted merge] (https://www.mercurial-scm.org/wiki/UnderstandingMercurial#line-157), '.' (точка) отображает только [первый родительский] (https://www.selenic.com/hg/help/revisions) двух родителей рабочей группы. –

+0

Вам нужен '-l 1'? Кажется, работать без него. – aaaidan

2

наиболее специфические не-DEPRECATED комм и которые из-за присутствия --template может печатать только информации о ревизии, если что краткость требуется (как это следует из вопроса):

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

Или для уникальной длинной формы хэша:

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

-b . или branch(.) (точка для названия филиала) means the current working directory branch и -r . означает текущую версию рабочего каталога, которая является documented в hg help revsets и hg help revisions.

Примечание. Если есть uncommitted merge, то . (точка) отображает только first parent двух родителей рабочей группы.

0

Как указывали другие, не используйте log -l.

Используйте hg log -r ., чтобы получить подробную информацию, в отличие от использования hg id, выход которого ограничен и не поддерживает шаблоны. Вы также можете создать небольшой псевдоним, например here = log -r . и использовать hg here. Если вы хотите, чтобы хэш использовал только hg log -r . --template '{node}\n'.