parent-1
child-1
child-child-1
child-child-2
child-2
child-3 (по описанию требует код child-child-1)
Допустим, добавляется новый модуль, менеджер задач поддерживает иерархию, тогда:
I. Разработка.
1) создаю parent-1, в ней добавляется общий код.
2) на основе parent-1 создаются child-1..3
2.1) если в parent-1 происходят ЛЮБЫЕ изменения, то в каждом ее child я делаю rebase от измененной parent-1.
3) на основе child-1 создаются child-child-1..2
3.1) если в child-1 происходят ЛЮБЫЕ изменения, то в каждом ее child я делаю rebase от измененной child-1.
4) child-3 требует код child-child-1. Я делаю merge child-child-1 в child-3 и ставлю в менеджере задач, что child-3 блокируется child-child-1.
4.1) если в child-child-1 происходят ВАЖНЫЕ для child-3 изменения, то я снова делаю merge child-child-1 в child-3
4.2) если в child-child-1 происходят НЕВАЖНЫЕ для child-3 изменения, то я не делаю merge вообще
II. Доставка.
Сценарий 1) непрерывный вывод каждой задачи, тогда child-1 и child-2 и все их подзадачи доставляются сразу после закрытия их в тест среде как master merge сhild-n (child-child-n).
child-3, как имеющий зависимость, ожидает доставки своих зависимостей и только потом может быть доставлен сам.
Сценарий 2) релиз тип, модуль должен быть доставлен разом. Тогда создается еще одна результирующая задача (release-1) в нее вливаются все конечные узлы каждой parent-1 подзадачи.
Здесь можно выделить отдельной задачей частичный релиз, выбрав только часть подзадач parent-1.
В результате имеются изолированные задачи с конкретными зависимостями и 2 вариантами доставки. Теоритически с доп. информацией пришел к такой системе. Минусы?