В настоящее время в своей практике я использую файл VERSION для хранения:
major=2
minor=0
fix=1
, что означает, что источники для версии продукта v2.0.1 или новее.
Перед каждым выпуском я должен зафиксировать обновление этого файла, чтобы тег с именем tag2.0.1 или release-2.0.1 охватывал содержимое выше (а не предыдущую версию!).
Я думаю, что можно избежать этой работы, автоматически генерируя файл VERSION из сценария сборки.
Смотрите историю оборотов:
+--+-----+----------------------+-YY--+----+------+------+-HH-->
dev| | ^ ^ | | | | |
| | | | | | v v v
| | | | | | +--+------+-ZZ---+-->
| | | | | | b2 | | |
| | | | | | v v v
| | | | | | t2.0.0 t2.0.1 t2.1.0
v v | | v v
t0.1.0 +---+--XX--+-+---+-+-----+------+------+------+------+--->
b1 | | | | | | | |
v v v v v v v v
t1.0.0 t1.0.1 t1.0.2 t1.1.0 t1.2.0 t1.2.1 t1.2.2 t1.2.3
В точке XX версия 1.0.0 , в точке ГГ версия 1.0.2 , в точке ZZ версия 2.0.1 .
Для точки ЧЧ это не знаю, как установить версию. Я думаю, что это должно быть 1.0.2 , потому что мы не объединяем ветку dev с веткой релиза b2 .
Я прочитал:
$ hg help revsets
но не вижу, как найти ближайший тег к данной ревизии. С Git и Bzr у меня меньше опыта ...
Или, если это невозможно, я ищу аргументы. Также мне нравится слышать, как избегать ручного ведения файла VERSION, если это возможно (или аргументов, почему это невозможно).
PS. Файл VERSION необходим для поддержания зависимости от пакета и определения состояния источника продукта по отзывам пользователей.
PSS. ближайший тег к данной ревизии термин может выглядеть нечетко, но каждый разработчик может сказать, с какой версией продукта он работает. Почему это не может сделать машина?