Это настоящая практическая проблема. Ситуация ухудшается, если у вас есть несколько версий, которые вам нужно поддерживать, и разветвленные для каждой из них. Еще хуже, если у вас есть настоящая ветка исследований и разработок.
Я предпочел, чтобы основная магистраль продолжала работать с нормальной скоростью и не держалась, потому что в среде, где сроки выпуска были коммерчески важны, я никогда не мог спорить о том, что мы должны позволить коду стабилизироваться («что, Вы имеете в виду, что выпустили его в нестабильном состоянии? ").
Ключ был в том, чтобы убедиться, что модульные тесты, созданные для исправления ошибок, были перенесены во время миграции ошибки в основную ветку. Если ваши новые изменения кода действительно просто перефакторины, тогда старые тесты должны работать одинаково хорошо. Если ваши изменения таковы, что они больше не действительны, вы не можете просто портировать исправление в любом случае, и вам нужно, чтобы кто-то серьезно подумал об исправлении в новом потоке кода.
После нескольких лет решения такого рода проблем я пришел к выводу, что вам, вероятно, нужно как минимум 4 потока кода для обеспечения надлежащей поддержки и охвата, а также набор довольно строгих процессов для управления кодом через них. Это немного похоже на проблему возможности рисовать любую карту в 4 цветах.
Я никогда не нашел действительно хорошей литературы по этому вопросу. Он неизбежно будет связан с вашей стратегией выпуска и соглашениями об уровне обслуживания, которые вы подписываете со своими клиентами.
Добавление: Я должен также упомянуть, что необходимо было записать объединение веток в виде определенных этапов в расписание выпуска основной ветки. Не стоит недооценивать объем работы, который может потребоваться для объединения ваших веток, если у вас есть набор трудолюбивых разработчиков, выполняющих свои функции по реализации функций.