Роздрукувати поточний репрезентативний посібник з перегляду?


124

Чи є кращий спосіб витягти поточний хеш редакції в Mercurial, ніж

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

?

Частина мого сценарію розгортання webapp "тегує" завантажений додаток тарболу своїм унікальним хеш-редакцією.


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, останній набір змін сховища, а не поточний набір змін робочої копії.
Джозеф Лізе

7
Використання --debug у скриптах не рекомендується, щоб вихід був менш ретельно контрольований без зворотної сумісності. Використовуйте шаблон. Якщо ви хочете зробити це з журналом, використовуйте .крапку як версію.
Ry4an Brase

Спасибі Ry4an, я не мав уявлення про "-r." посилання на поточну версію робочої копії. Це здається кращим, ніж перехід від "журналу" до "батьківського".
Джозеф Лізе

Без проблем. hg help revisionsі hg help revsetsмає кілька божевільних потужних ярликів.
Bra4 Ry4an Brase

Але це не найбільш конкретна відповідь на питання, тому що afaik hg id -iдрукує лише коротку (12 символів) форму глобального хеш-ідентифікатора, а оскільки hg identifyне вистачає --templateафаїків, немає ніякого способу вилучити лише версію та більше нічого, оскільки сторінка man говорить про це друкує резюме.
Шелбі Мур III

41
hg --debug id -i

Це призведе до отримання тривалого хешу з плюсом, якщо відбудуться незаперечні зміни.


Здається, це за замовчуванням в 3.1.2
nickd

1
Відхилення через коментар Ry4an .
Шелбі Мур III

20

Ви можете використовувати --template з батьківською командою, я використовую це, щоб отримати довгий хеш:

hg parent --template '{node}'

Сторінка hg man каже hg parents, що ВИГОТОВЛЕНО , хоча, можливо, це було не так, коли ви писали цю відповідь. Якщо відбувається безперервне злиття, є два батьківські зміни .
Шелбі Мур 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" не підтримує шаблони і не має можливості друкувати довгий хеш (якщо хтось не знає, як це зробити).
Ейвер

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.