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

124

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

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

?

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

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

Ответы:

196

Пытаться:

hg id -i

Пример:

$ hg id -i
adc56745e928
Ry4an Brase
источник
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,
41
hg --debug id -i

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

Фрэнк
источник
Похоже, это значение по умолчанию в 3.1.2
nickd
1
Голосование против комментариев Ry4an .
Shelby Moore III,
20

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

hg parent --template '{node}'
Shadowspawn
источник
На странице руководства hg сказано, hg parentsчто УСТАРЕЛО , хотя, возможно, это могло быть не так, когда вы писали этот ответ. Если есть незафиксированное слияние, есть две родительские ревизии .
Shelby Moore III
2
Может ли кто-нибудь сказать нам, почему hg Родители устарели и что мы должны использовать вместо этого?
Винсент
17

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

hg log -l 1 --template '{node}\n' -r .
Rog
источник
Обратите внимание, что если есть незафиксированное слияние , .(точка) отображает только первого родителя из двух родителей рабочей группы.
Шелби Мур 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.

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

Шелби Мур III
источник
3

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

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

Gru
источник
1

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

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

texnic
источник