Мы с коллегой по очереди обсуждали / обсуждали вопросы / преимущества интеграции версии, полученной из текущего репозитория git, в наш код при его сборке.
Мы считаем, что достоинства включают в себя:
- Не нужно беспокоиться о человеческой ошибке при обновлении номера версии
- Прослеживаемость между тем, что мы находим в устройстве, и исходным кодом, из которого оно было получено
Проблемы, которые возникли (для нас), включают в себя:
- Системы сборки, производные от IDE (например, MPLABX), могут затруднить поиск мест для размещения этих типов хуков (и в итоге это может оказаться довольно глупым)
- Больше работы для фактической интеграции этого в скрипты сборки / make-файлы
- Соединение с конкретным подходом к сборке (например, что, если один человек строит с помощью XCode, а другой MPLABX) может создать сюрпризы
Поэтому нам любопытно, где другие попали в эту дискуссию. Для обсуждения действительно легко стать анекдотичным. Есть много людей, которые настаивают на сквозной автоматизации, вешают объем предварительной работы и сопряжения, которые она создает. И на другой стороне дебатов есть много других, которые просто делают самое легкое, что работает, и живут с рисками.
Есть ли обоснованный ответ, на какую сторону лучше приземлиться?
источник
it describe
(последняя часть строки) - это не cset-id тега, а хеш набора изменений, для которого мы получим описание . В понятной человеку формеv1.1.2-6-a3b27gae
будет «Шесть наборов изменений после набора изменений, помеченные как v1.1.2-6, имеет короткий хэш набора изменений a3b27gae»git checkout v1.1.2
или перечислить фиксацию тега с помощьюgit rev-list v1.1.2 | head -n 1
.Раньше мы были магазином SVN, поэтому эта математика была проста - номер сборки был SVN rev, и это было так. Мы попытались сохранить это, когда начали переходить на DCVS, и обнаружили, что это не удалось по нескольким причинам.
Во-первых, кто знает, является ли rev 69bc333bc8d8 до, после или одновременно с rev 25b0f0d1052c? Существует очень мало контекста по сравнению с системой SVN, когда вы, по крайней мере, знали, что 101 был после 100. Во-вторых, природа контроля источника DCVS делает вещи нелинейными во многих отношениях, когда последующие сборки могут не продвигаться по тому же шару.
Мы наконец-то решили использовать сервер сборки для распределения номеров сборки по вещам, так как он имел правильную видимость и способность справляться с этим.
источник
Я использую следующую схему для системы сборки Visual Studio библиотеки C # DLL для автоматического генерирования номеров версий (у нас исторически были проблемы с развертыванием, которое выполнялось неправильно, поэтому требовался чистый способ гарантировать правильное развертывание версии).
Обратите внимание, что это предполагает, что у вас есть 2 функциональных 16-битных числа без знака для игры. Создание эквивалентной системы, которая использует меньшие числа, также может быть сделано.
Также обратите внимание, что нечисловые поля могут быть полезны, если вы можете прикрепить их как метаданные. Например, добавление номера версии git в качестве номера информационной версии.
источник
Я напрямую связываю вывод состояния git, log и diff в исполняемый файл. Тогда есть возможность напечатать это. Преимущество заключается в том, что вы можете не только выяснить, из какой ветки был собран ваш бинарный файл, но и какие незафиксированные изменения исходного кода включены. Посмотри пожалуйста:
https://github.com/colding/MercuryFIX/tree/master/stdlib/scm_state
Вы должны быть в состоянии использовать эти 3 файла для создания своей собственной библиотеки состояний SCM.
источник
Я бы порекомендовал использовать Autorevision .
Вы можете получить вывод в различных форматах, например, заголовок в стиле c .
Есть также несколько примеров (в директории contribs) того, как вы можете соединить вещи так, чтобы независимо от того, кто строит и как они это делают, они всегда получали одинаковую информацию о версии, даже если они строят из tarball.
Кроме того , поскольку в дополнение к
git
Autorevision работаетsvn
иhg
это делает проще переключаться от SVN без изменения слишком много , как только вы его создали.источник
<VCS_TAG>-<VCS_SHORT_HASH>
,<VCS_TAG>-<VCS_TICK>
или даже<VCS_ACTION_STAMP>
все должно работать. Если вам нужен полный список символов каждого из этих символов, я бы посоветовал заглянуть в справочную страницу .