ОК, пара мыслей:
Для такого типа рабочего процесса вы бы сделали НАМНОГО лучше с SCM с потоковой моделью, такой как Accurev или ClearCase. В потоковой модели работа передается от потоков каждого разработчика к потокам интеграции, затем к потокам QA, а затем к потокам выпуска (или к тому, что работает лучше всего). Поднимается только работа, готовая перейти к следующему этапу, и интеграция может быть выполнена только с этими пакетами работ.
Как сказал deceze, вам нужно разбить вещи на части более модульно, но вам также нужно объединить это с системой локализации, где специфичные для клиента функциональные возможности могут переопределять определенные части кода. Один из способов сделать это в PHP - реализовать оболочку импорта файлов PHP, которая сначала ищет клиентскую версию файла PHP, и, если она не существует, вместо этого загрузите универсальную версию.
function importModule($module, $clientId){
if(is_file("${clientRootDir}/${clientId}/${module}.php")) {
import("${clientRootDir}/${clientId}/${module}.php");
} else {
import("${defaultRootDir}/${module}.php");
}
}
Используя эту технику, вы можете изящно перезаписать части работы веб-сайта только для этого клиента, и человек, работающий над этой функцией для этого клиента, работает в совершенно другом файле, чтобы они не сталкивались друг с другом.
Я не уверен, что вы уже делаете это, и это то, что вы называете своей "моделью местоположения"
Наконец, с таким количеством «виртуальных веб-сайтов» для тестирования, вы получите огромную выгоду от добавления автоматического модульного тестирования (в виде PHPUnit) в сочетании с непрерывной интеграцией для автоматического запуска тестов, когда программное обеспечение подходит к стадии интеграции.