У нас есть ветвь разработки для каждого исправления, функции или задачи, а вовлеченные проекты, как правило, имеют несколько дочерних веток.
Первоначально было довольно странно создавать новую ветку только для однострочного исправления кода, но она позволяет объединить транк в ветвь, затем регрессионное тестирование и, наконец, вернуться в транк.
В идеале это означает, что что-либо объединенное с транком не нарушит сборку, и это означает, что вы не боитесь зафиксировать свой код для создания хрупкой сборки.
Я часто использую несколько веток для одной проблемы, тестируя разные решения, но при этом получаю преимущества SCM.
Мы также помечаем конкретные версии или выпуски, что позволяет быстро развертывать их на основе известного хорошего кода.
Во многих наших веб-системах используется svn: externals, которые указывают на конкретные версии зависимостей, таких как библиотеки и код поставщика. Развертывание берется из внешних источников, а не из прямой проверки или экспорта.