Я автоматизирую семантическое управление версиями с помощью TeamCity и Github и пытаюсь найти способ подсчета коммитов, которые напрямую влияют на основную ветку.
Вероятно, лучше всего это объясняется на этом аннотированном скриншоте из Git-Extensions. Я хочу автоматически вычислить номера версий в стрелках:
Я использую ruby и octokit для запросов к GitHub API как части моего процесса сборки. Номер основной и дополнительной версии увеличивается вручную, когда фиксация или слияние квалифицируются как основная/дополнительная версия, поэтому псевдокод в основном выглядит следующим образом:
- найти фиксацию, соответствующую major.minor.0
- подсчитывать каждую фиксацию, начиная с major.minor.0, которая изменила состояние основной ветки
- установите версию патча на commits.count
Проблема, с которой я столкнулся, заключается в том, что если я просто подсчитываю коммиты для master, каждый раз, когда принимается запрос на вытягивание, счетчик коммитов увеличивается на n+1, где n количество коммитов, сделанных в ветке. Это будет работать, но это... неэлегантно. Да, я понимаю, что когда вы принимаете запрос на вытягивание, вы фактически принимаете всю историю этой ветки как часть вашей «главной» истории, но для целей управления версиями это не имеет значения.
Кто-нибудь знает, как я могу фильтровать коммиты через API GitHub, чтобы узнать, повлияла ли фиксация непосредственно на master в момент ее создания, или есть какая-то причина, по которой это на самом деле невозможно?
Спасибо!