Распечатать хэш текущей версии Mercurial?

Есть ли лучший способ извлечь текущий хэш ревизии в Mercurial, чем

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

?

Часть моего сценария развертывания веб-приложения «помечает» загруженный архив приложения уникальным хэшем версии.


person rentzsch    schedule 21.03.2010    source источник
comment
Обратите внимание, что hg log -l 1 дает вам самый последний набор изменений, не обязательно тот, который вы обновили в данный момент! Флаг -f ограничивает вывод журнала hg предками текущего рабочего каталога, поэтому hg log -f -l1 ближе к тому, что вам нужно.   -  person waterproof    schedule 13.01.2015


Ответы (8)


Пытаться:

hg id -i

Пример:

$ hg id -i
adc56745e928
person Ry4an Brase    schedule 21.03.2010
comment
На случай, если люди пропустят приведенные ниже решения, если вы хотите использовать полный хэш: hg --debug id -i если вы хотите использовать поддержку шаблонов, hg parent --template '{node}' не используйте hg log -l 1, это последний набор изменений репозитория, а не текущий набор изменений рабочей копии. - person Joseph Lisee; 11.06.2012
comment
Использование --debug в сценариях не рекомендуется, этот вывод менее тщательно контролируется с обратной совместимостью. Используйте шаблон. Если вы хотите сделать это с журналом, используйте точку . в качестве ревизии. - person Ry4an Brase; 12.06.2012
comment
Спасибо, Ry4an, я не знал о -r . ссылаясь на текущую редакцию рабочей копии. Это кажется лучшим шагом, чем переход от журнала к родителю. - person Joseph Lisee; 13.06.2012
comment
Нет проблем. У hg help revisions и hg help revsets есть такие безумно мощные ярлыки. - person Ry4an Brase; 14.06.2012
comment
Но это не самый конкретный ответ на вопрос, потому что afaik hg id -i печатает только короткую (12 символов) форму глобального хеш-идентификатора, а поскольку hg identify не хватает --template afaics, нет возможности извлечь только ревизию и ничего больше, поскольку < href="https://www.selenic.com/mercurial/hg.1.html#identify" rel="nofollow noreferrer">справочная страница говорит, что печатает сводку. - person Shelby Moore III; 26.11.2015

hg --debug id -i

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

person Frank    schedule 15.02.2012
comment
Кажется, это значение по умолчанию в 3.1.2. - person nickd; 30.04.2015
comment
Голосование понижено из-за комментария Ry4an. - person Shelby Moore III; 26.11.2015

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

hg parent --template '{node}'
person shadowspawn    schedule 16.02.2012
comment
На странице руководства hg сказано, что hg parents является УСТАРЕВШИМ, хотя, возможно, это не так. был случай, когда вы написали этот ответ. При наличии незафиксированного слияния имеются две родительские ревизии. - person Shelby Moore III; 26.11.2015
comment
Может ли кто-нибудь сказать нам, почему hg parent устарел и что мы должны использовать вместо этого? - person Vincent; 23.09.2016

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

hg log -l 1 --template '{node}\n' -r .
person rog    schedule 02.08.2013
comment
Обратите внимание, если есть незафиксированное слияние, только . (точка) отображает первого родителя двух родителей рабочей группы. - person Shelby Moore III; 26.11.2015

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

См. документацию, параграфы "Основы шаблон» и далее.

person Alex Martelli    schedule 21.03.2010
comment
Я хотел почти такой, но с длинным хэшем. Псевдонимы lid на log -l 1 --template '{node}\n' достигли именно этого - напечатать полный идентификатор ревизии. - person Michael Ekstrand; 21.04.2011
comment
Это печатает самый последний извлеченный набор изменений. Наш рабочий каталог может быть обновлен до более старого набора изменений. Чтобы распечатать набор изменений, до которого мы обновлены, используйте hg id. Единственная проблема в том, что hg id не поддерживает шаблоны и не имеет возможности печатать длинный хэш (если только кто-то не знает, как это сделать). - person Eiver; 28.11.2011
comment
Как сказал Эйвер, это не печатает фактическую версию в вашей рабочей копии, а только самую последнюю в вашем репозитории. Поскольку использование этого решения может привести к ошибкам отслеживания, я проголосовал против этого решения. - person Joseph Lisee; 11.06.2012
comment
То же самое отрицательный голос Джо. Также @Eiver использует hg --debug id -i, как сказано в другом месте. - person AJP; 05.06.2014

Самая конкретная команда, не являющаяся УСТАРЕВШЕЙ, которая из-за наличия --template может печатать только информацию о версии, если требуется эта краткость (как подразумевается вопросом):

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

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

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

-b . или branch(.) (точка для имени ветки) означает текущий рабочий ветвь каталога, а -r . означает текущую версию рабочего каталога, которая задокументирована в hg help revsets и hg help revisions.

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

person Shelby Moore III    schedule 26.11.2015

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

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

person Gru    schedule 01.08.2016

Если используется TortoiseHg, щелкните правой кнопкой мыши строку ревизии в Workbench и выберите «Копировать хэш» (согласно документацию).

введите здесь описание изображения

person texnic    schedule 24.07.2018