evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом

Как организовать контроль версий двух одинаковых сайтов?

Случилась ситуация - имеется два сайта, построенных на одной кодовой базе. Они будут различаться, но незначительно. При том поддерживать надо оба, соответственно изменения в коде должны применяться и туда и туда, но так, чтобы различия в коде не приводили к конфликтам. Как это обычно делается?
Git, CodeIgniter.
  • Вопрос задан
  • 2816 просмотров
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
3 ветки кода:
основная и по ветке специфичных изменений на каждый из сайтов.
изменения из основной периодически вливаются в ветки сайтов.
главное код хорошо тестами покрыть)

Либо второй вариант - если отличия реально незначительные, и в будущем усугубление ситуации не планируется - можно заворачивать оба домена на один и тот же код, а в самом коде реализовать ветвление.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
copist
@copist
Мидл, хочешь стать синьором? http://copi.st/ExhE
Нужно 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. Использование таблицы классов в фреймворке Yii
Yii::$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', // <-- можно указать другой класс
        ),
    ),
);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы