Вся путаница проистекает из различной семантики, которую MS использует для «номера сборки» и особенно «ревизии». Термины просто означают разные вещи.
Большинство людей (включая меня) используют семантическую схему нумерации версий, при которой вы просто получаете больший номер BUILD всякий раз, когда вам по какой-либо причине необходимо создать новую сборку. Для нас исправление считается еще одним изменением кода, и часть BUILD увеличивается автоматически с каждым запуском CI. Модули с одним и тем же MAJ.MIN.REV считаются взаимозаменяемыми, и BUILD сообщает вам, какой из них является самым последним.
Однако увеличение значения REVISION указывает на новую ветвь постоянного выпуска, поэтому мы размещаем ее перед BUILD. Недостатком этого подхода является то, что мы можем получить следующую последовательность событий:
- Фиксация 4711: Алиса добавила функцию A
- CI производит сборку 1.2.3.100
- Фиксация номер 4712: Боб изменил функцию B
- Фиксация 4713: Алиса исправила функцию A («исправление»)
- CI производит сборку 1.2.3.101
Как видите, исправление - не единственное изменение, содержащееся в следующей сборке, также модификация Боба становится частью этой сборки. Если вы хотите стабилизировать текущую ветку, вы можете столкнуться с проблемами, так как никогда не можете быть уверены, добавил ли Боб кучу ошибок.
MS использует оба термина по-разному. Номер BUILD не увеличивается автоматически, вместо этого его можно рассматривать как разновидность ветки релиза, чтобы заморозить код, используемый для конкретной версии кода. Пересмотр указывает на дополнительные «горячие» изменения, примененные к этой ветви BUILD. Следовательно, последовательность будет следующей:
- Фиксация 4711: Алиса добавила функцию A в транк / мастер
- Карл создает ветку сборки
1.2.100
- CI производит сборку 1.2.100.0
- Фиксация 4712: Боб изменил функцию B в транке / хозяине
- Фиксация 4713: Алиса исправила функцию A в
1.2.100
ветке
- CI производит сборку 1.2.100.1
Термин ПЕРЕСМОТР может относиться к
- продукт пересмотр (это, как большинство людей используют его)
- пересмотр конкретной ежедневной сборки (это то, что делает MS)
Основное различие между этими двумя процессами заключается в том, хотите ли вы применять исправления к сборкам CI и, следовательно, в какой момент процесса создается ветвь. Этот аспект становится важным, когда вы хотите иметь возможность выбрать конкретную сборку в любое время после успешного завершения всех тестов и продвигать именно эту версию до следующего официального выпуска вашего продукта.
В нашем случае инструмент CI создает тег репозитория, поэтому у нас всегда есть необходимая информация, готовая к использованию, когда это необходимо. С SVN это становится еще проще, потому что теги и ветви реализованы точно так же - тег - это не что иное, как ветвь, расположенная под ним /tags
.
Смотрите также
Из раздела FAQ в стратегии ветвления TFS :
В какой ветке я должен исправить тикет P1 (исправление)?
P1 должен быть зафиксирован в ветви, ближайшей к базе кода, работающей в Production. В этом случае P1 должен быть зафиксирован в ветви Prod. Применяя исправление в любой другой ветке и внедряя изменения в рабочую среду, вы рискуете высвободить неполный или непроверенный код из последующих итераций.
Теперь вы можете спорить, безопасно ли работать напрямую с веткой Prod, подумайте еще раз, P1, который требует немедленного внимания, не должен быть фундаментальной проблемой в системе. В случае, если это является фундаментальной проблемой, ее следует добавить в Журнал ожидания продукта, так как это может потребовать дальнейшего анализа и обсуждения с клиентом.
Другое хорошее чтение - руководство по ветвлению TFS.