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


124

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

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

?

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


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

Ответы:


196

Пытаться:

hg id -i

Пример:

$ hg id -i
adc56745e928

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

7
Использование --debug в скриптах не рекомендуется, так как этот вывод менее тщательно контролируется из-за обратной совместимости. Воспользуйтесь шаблоном. Если вы хотите сделать это с журналом, используйте .точку в качестве версии.
Ry4an Brase

Спасибо Ry4an, я понятия не имел о "-r". ссылка на текущую ревизию рабочей копии. Кажется, это лучший ход, чем переключение с «журнала» на «родительский».
Joseph Lisee

Без проблем. hg help revisionsи hg help revsetsимеет несколько таких безумно мощных ярлыков.
Ry4an Brase

Но это не самый конкретный ответ на вопрос, потому что afaik hg id -iпечатает только короткую (12 символов) форму глобального хеш-идентификатора, а поскольку afaics не hg identifyхватает --templateafaics, нет способа извлечь только ревизию и ничего больше, так как на странице руководства это сказано печатает резюме.
Shelby Moore III,


20

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

hg parent --template '{node}'

На странице руководства hg сказано, hg parentsчто УСТАРЕЛО , хотя, возможно, это могло быть не так, когда вы писали этот ответ. Если есть незафиксированное слияние, есть две родительские ревизии .
Shelby Moore III

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

17

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

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

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

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

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


2
Хотел почти это, но с длинным хешем. Aliasing lidк log -l 1 --template '{node}\n'достигается именно это - напечатать полный идентификатор версии.
Майкл Экстранд

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

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

1
То же, что и Джо против. Также @Eiver используйте, hg --debug id -iкак сказано в другом месте.
AJP

3

Самая конкретная команда, не являющаяся УСТАРЕВШЕЙ, которая из-за наличия --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.

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


3

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

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


1

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.