Нужно 3 ветки в репозитории -
ядро +
сайт1 +
сайт2
в репозиториях
сайт1 и
сайт2 делаете git submodule
ядро
теперь
сайт1 и
сайт2 содержат
ядро как часть кода
но это сработает только в том случае, когда сайт1 и сайт2 используют ядро, но не модифицируют его. Допустимо наследование, замена классов, настройка через файл конфигурации
Например, ядро содержит файл HttpRequest.php с классом HttpRequest
А в приложении сайт1 требуется дополнительные функции в этом классе
Тогда возможны два варианта решения в зависимости от того, что реализовано в ядре:
1. Настройка автозагрузки файлов
Создаём копию файла Site1HttpRequest.php c определением класса HttpRequest в коде сайт1
Настраиваем autoloader для сайт1 так, чтобы при обращении к определению класса HttpRequest использовался файл Site1HttpRequest.php
2. Локатор (инверсия зависимостей)
В коде ядра создаём класс-локатор для хранения часто используемых экземпляров, которые он возвращает по ключевому имени. Например сущность с ключом request - это экземпляр класса HttpRequest.
В коде сайт1 создаём класс Site1HttpRequest, который наследует HttpRequest из ядра, расширяем или переопределяем функционал.
В настройках класса-локатора для сайт1 пишем, что если требуется экземпляр к кодом request, то должен загрузиться класс Site1HttpRequest.
Ссылки и куски кода:
1.
git submodules
2.
Использование таблицы классов в фреймворке YiiYii::$classMap=array(
'HttpRequest'=>'/path/to/HttpRequest.php', // <-- можно указать другой путь к классу
);
Yii::createWebApplication($config)->run();
3.
Application - класс-локатор в фреймворке Yii# @file protected/config/main.php
array(
'components' => array(
'request' => array(
'class' => 'HttpRequest', // <-- можно указать другой класс
),
),
);