Как правильно вести большой проект в системе контроля версий?
Допустим есть большой проект, включающий в себя множество приложений и библиотек. Также данный проект может быть кастомизирован под многих заказчиков (что повлечет за собой изменение некоторых приложений и билиотек). Интересуют ответы на следующие вопросы:
1) Как проще хранить такой проект (монолитно или же раздельно)?
2) Как в этом случае учитывать возможность кастомизации всего проекта?
3) Как при этом сохранять релизы?
4) Как накладывать критичные патчи?
5) Как это работает в крупных компаниях? (Google, Microsoft)
P.S. Я в курсе как поддерживается ядро линукса, но я буду рад, если вы приведете в пример другие похожие open-source примеры.