Автоматически помечать наборы изменений при фиксации или отправке в печь
Вопрос
Я хотел бы знать, есть ли способ автоматически помечать набор изменений, когда он фиксируется локально или при отправке в репозиторий печи.
Я бы хотел, чтобы каждый набор изменений имел тег с номером версии/сборки.Я планирую хранить номера версий/сборок в базе данных и хотел бы, чтобы сценарий извлекал это значение из базы данных и добавлял тег в набор изменений.Можно ли автоматически вызвать сценарий, чтобы сделать это как событие после фиксации или как событие после отправки в репозиторий печи?
Я также открыт для любых других подходов для достижения автоматической пометки при каждом коммите/нажатии.
Решение
Вместо того, чтобы создать тег для каждого изменения, почему бы не попробовать одно из следующих действий:
- Используйте файлы изменений в качестве идентификатора?
- Используйте строку, сгенерированную из журнала в качестве идентификатора (см. Ниже)?
Описательная строка может быть сгенерирована из журнала, используя эту команду:
hg log -r 1.7.2 --template '{latesttag}-{latesttagdistance}-{node}\n'
Результат принимает форму:
<latest tag>-<# changesets since latest tag>-<changeset hash>
Например, на моем локальном клоне Repo Mercurial это генерирует:
1.7.2-2-5e51254ad4d4c80669f462e310b2677f2b3c54a7
Что говорит мне, что произошло два коммита с тега 1.7.2, а нынешние измерительные устройства 5E51254A.
В Mercurial каждый меток создает новые изменения. Поэтому, если вы тереете каждый коммит, вы удвоите количество изменений в репо. Вы должны использовать встроенные инструменты (как описано выше), а не пытаться воссоздать колесо.
Другие советы
Я хотел бы знать, есть ли способ автоматически помечать набор изменений, когда он фиксируется локально или при отправке в репозиторий печи.
Для этого вы всегда можете написать хук после фиксации.
Я бы хотел, чтобы каждый набор изменений имел тег с номером версии/сборки.
Теги полезны для определения важных моментов в истории коммитов.Дайте этим моментам значимое имя, связанное с разработкой продукта, например, версия 1.0, версия 1.3 и т. д.
Если бы вы помечали каждый набор изменений, вы бы просто увеличили уровень шума.Вам все равно придется где-то хранить информацию о важных тегах.
Рассматривайте тег как метаинформацию о наборах изменений.Не все из них заслуживают одинакового значения.Не всем из них требуется эта метаинформация.
Просмотр тегов может дать вам значимую историю только в том случае, если вы используете их экономно.
На крючках
Видеть:
- http://www.selenic.com/mercurial/hgrc.5.html#hooks
- Полезные крючки Mercurial
- https://www.mercurial-scm.org/wiki/Hook
Пример:Запускать после добавления группы изменений посредством push, pull или разделения.Я использовал его для запуска автоматических сборок.
[hooks]
changegroup.yyyy = command
Аналогично, есть хуки post-commit и post-push.
[hooks]
post-<command> = command