Избегайте конфликтов в сценариях установки с несколькими разработчиками


Мы используем сценарии настройки Magento , расположенные в каталогах sql и данных, для распространения изменений данных во все рабочие копии и среды. Это включает в себя настройки конфигурации, создание новых таблиц, атрибутов и так далее.

[Обновление] Специфичный для проекта код входит в несколько расширений Client_module.

Тем не менее достаточно часто нам приходится добавлять миграции данных (т.Е. сценарии установки), которые нельзя отнести к существующее расширение. Таким образом, мы используем модуль company_client (или Client_General, что-то в этом роде) для этих изменений.

Представьте нескольких разработчиков, работающих над одним и тем же проектом одновременно. Может случиться так, что разработчик A и разработчик B одновременно изменяют номер версии Company_Client и создают новый сценарий обновления. Даже если вы часто обновляете свою рабочую копию, вы будете получать конфликты чаще, чем вам хотелось бы, вам придется менять версию вашего локальное расширение Company_Client и убедитесь, что сценарии ваших коллег запускаются, когда вы получаете их изменения.

Три решения с моей головы:

  1. Создайте множество расширений для частей, специфичных для проекта (загрязняет пулы кода множеством ненужных расширений).
  2. Создайте по одному расширению для каждого разработчика для сценариев обновления (может работать, но не имеет смысла).
  3. Прикуси язык и вручную сделай такой результат конфликта, который я объяснил раньше.

Как вы справляетесь с этим?

Author: Matthias Zeis, 2013-03-21

3 answers

Я верю, что нашел решение, которое удовлетворяет мои потребности.

Мои предварительные требования:

  • Используйте только одно расширение для всех небольших миграций данных/структур, которые не вписываются ни в одно другое расширение
  • Позволяет нескольким разработчикам создавать сценарии установки без конфликтов из-за номеров версий

Первая часть моего решения: используйте несколько ресурсов сценария установки в одном расширении. Это легко возможно (содержание config.xml):

<?xml version="1.0"?>
<config>
    <!-- Your other config stuff... ->
    <global>
        <!-- Your other config stuff... ->
        <resources>
            <[your_setup_name_1]>
                <setup>
                    <module>[Your_Extension]</module>
                </setup>
            </[your_setup_name_1]>
            <[your_setup_name_2]>
                <setup>
                    <module>[Your_Extension]</module>
                </setup>
            </[your_setup_name_2]>
        </resources>
    </global>
</config>

Проблема, с которой вы столкнетесь, заключается в том, что все ваши ресурсы установки будут иметь одинаковый номер версии в таблице базы данных core_resource (это номер версии, который вы указываете в своем узле modules). Вы этого не хотите, так как это снова создаст проблемы и конфликты для ваших разработчиков.

Введите вторую часть моего решения: класс настройки пользовательских ресурсов с небольшим изменением. Изменяя по одной строке в каждом из методов applyDataUpdates() и applyUpdates(), вы можете попросите Magento прочитать номер версии с другого XML-узла.

Заменить

$configVer = (string)$this->_moduleConfig->version;

С

$configVer = (string)$this->_resourceConfig->setup->version;

Теперь вы можете указать разные номера версий для каждого из ваших ресурсов настройки:

<?xml version="1.0"?>
<config>
    <!-- Your other config stuff... ->
    <global>
        <!-- Your other config stuff... ->
        <resources>
            <[your_setup_name_1]>
                <setup>
                    <module>[Your_Extension]</module>
                    <class>Emzee_MultipleSetupVersions_Model_Resource_Setup</class>
                    <version>0.0.3</version>
                </setup>
            </[your_setup_name_1]>
            <[your_setup_name_2]>
                <setup>
                    <module>[Your_Extension]</module>
                    <class>Emzee_MultipleSetupVersions_Model_Resource_Setup</class>
                    <version>0.0.2</version>
                </setup>
            </[your_setup_name_2]>
        </resources>
    </global>
</config>

Сценарии установки будут выполняться независимо, и соответствующий номер версии будет записан в core_resource. Все остальное должно работать как всегда.

Теперь вам просто нужно определиться со своей стратегией как разделить ресурсы (одна настройка ресурс на единицу, на разработчика,...).

Вы можете взглянуть на доказательство расширения концепции на Github.

 4
Author: Matthias Zeis, 2013-03-23 10:21:56

Из приведенного выше соглашения об именах Company_Client похоже, что вы оставляете область действия только для 1 конкретного модуля проекта на клиента, что вынуждает нескольких разработчиков работать в одном модуле, вероятно, разрабатывая совершенно разные функции.

Почему бы не использовать настройку Client_Module, где модуль описывает цель создаваемого модуля? Этот подход прекрасно работал для меня в прошлом, а также гарантирует, что вы не разрабатываете ни одного, довольно раздутого модуля это делает самые разные вещи.

Иногда я понимаю, что вам нужно внести незначительные изменения, которые реально не гарантируют их собственный модуль, и в этом случае я склонен использовать один модуль с одинаковым именем модуля для всех клиентов, но клиент явно меняется - я остановился на Client_Override для таких изменений.

Время от времени вы всегда будете сталкиваться с конфликтующим кодом, но обеспечиваете надлежащий рабочий процесс, хорошее именование модулей и разумное использование количество ветвлений в вашем репозитории сводит это к минимуму.

 1
Author: Jonathan Hussey, 2013-03-21 11:36:55

Я разрабатываю расширение под названием "Mageploy" с целью решения проблемы синхронизации различных сред:

Https://github.com/pug-more/mageploy

Он все еще должен быть расширен, хорошо документирован и полностью протестирован, даже если я уже использую его в нескольких проектах, имеющих некоторые преимущества.

Это открытый исходный код, и любая помощь или предложение будут оценены по достоинству.

С уважением

 0
Author: Alessandro Ronchi, 2013-03-25 08:01:37