Вопрос

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

Я изучил подмодуль GIT и поддерево Git. Я не думаю, что GIT Submodule будет работать для того, что мне нужно. Magento имеет следующий тип структуры дерева:

/app
  /code
     /community *
     /core
     /local *
  /design
     /adminhtml
     /frontend
        /base
        /yourtheme *
/lib
  /Zend
  /Varien
  /yourlib *
/js
  /yourjs *
  /varien
  /mage

Использование подмодуля GIT, кажется, лучше всего работает в отдельных папках (например, ваше приложение, и /поставщик /Magento является подмодулем). Однако, с такой степенью переплета, подмодуль не кажется хорошим решением. Я ошибаюсь в этом?

Это оставляет меня с поддереем git. Но с подтереем GIT то же самое основное предположение (что ветвь поставщика, как подразумевается именем, поддерево) не является правдой. Magento не подтерярь, а основная библиотека, в которой подходит мой проект. Это правильно?

Если эти два метода GIT не работают, есть ли другие, о которых я должен знать, это сделает то, что я пытаюсь достичь?

Окончательный вариант, который я не хочу преследовать, - это репо, которое я затем просто применяю по последним изменениям поставщика (вытащился из тарбола). Я не хочу преследовать это, так как чувствую, что информация о журнале поставщика (извлеченная из https://github.com/magentomirror/magento-mirror) было бы очень полезно при сортировке новых обновлений и выяснения, какие изменения повлияли на меня.

Это было полезно?

Решение

Я думаю, что вы можете использовать инструмент Modgit для этого: https://github.com/jreinke/modgitВы сможете клонировать некоторые модули Magento с командой Modgit Clone. Полный пример доступен здесь: http://www.bubblecode.net/en/2012/02/06/install-magento-modules-with-modgit/

Другие советы

Не из тех методов, которые вы упомянули, действительно сработали для меня ...

В настоящее время я использую груша Чтобы установить и управлять обновлениями модулей основного и сообщества, а также совершение всей структуры Magento в репозиторий GIT со следующим файлом .gitignore:

# Dynamic data that doesn't need to be in the repo
/var/*
/media/*
/downloader/pearlib/cache/*
/downloader/pearlib/download/*
/app/etc/use_cache.ser
local.xml

и используя следующую команду оболочки, чтобы сохранить пустые каталоги:

for i in $(find . -type d -regex ``./[^.].*'' -empty); do touch $i"/.gitignore"; done;

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

Меня пытались запустить тему на форуме Magento, но также не получил никаких ответов:http://www.magentocommerce.com/boards/viewthread/78976/

Обновлять:

Установщик Magento Composer - стоит посмотреть.

Композитор Стать стандартным инструментом управления зависимостями для PHP, поэтому вы получите гораздо больше преимуществ, используя его в своем проекте.

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

Спасибо.

Ваш вопрос больше о подмодуле GIT против поддерева в целом. Я не могу придумать ни магенто, которые повлияют на сравнение. Скорее всего, вы знаете Стратегии слияния поддерево Что я порекомендую, но я не уверен, зачем вам слиться на первом месте.

Лучшая практика слияния - избежать этого, и архитектура Magento достаточно гибкая, чтобы позволить этому. Следуйте простому набору правил:

  1. Избегайте исправления кода поставщика.
  2. Если вы не можете. Перед тем, как сделать патч, рассмотрите возможность упаковки ваших изменений в пользовательский модуль Magento и поместить его в приложение/код/локальный.

Если ваша модификация касается кода PHP:

  1. Вы можете извлечь выгоду из ООП и минимизировать изменения только в определенных методах. Продлить соответствующие классы.
  2. Перезаписать соответствующий класс, используя механизм конфигурации Magento в config.xml.
  3. Если предыдущее невозможно достичь - поместите свои изменения (исправленные классы) в приложение/код/локальный, то есть выше в порядке include_path, чтобы ваш код был эффективно использован вместо кода поставщика.

Если ваша модификация касается шаблона PHTML -> Используйте механизм макета Magento, чтобы заменить PHTML поставщика на ваш. Правильная настройка дизайна потребует в любом случае тяжелой модификации и макетной работы.

Если ваша модификация касается JS -> снова, используйте макеты, чтобы связать код, размещенный в папках JS или кожи.

Я думаю, вы говорите о разных вещах.

Предложения Яуэна абсолютно верны. Вы можете выполнить все это в GIT, и вам не нужны подмодули или подделки.

У меня есть такой же .gitignore файл, что и вы, так что это выглядит хорошо.

Я сделал рецензию о том, как мы используем GIT в качестве команды для управления магазинами Magento здесь, возможно, это будет полезно для вас:

Лучшие практики для развертывания Magento

Рабочий процесс, похожий на одеял

Это именно то, что раньше было сделано с помощью одеяла, с которым вы в настоящее время делаете Сложный git (на вершине git), Ртутные очереди (поверх HG) или Ткацкий станок (на вершине базара).

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

Чистый git

Следующее рассматривает, что вы клонируете Magento Git Repo. Если они не используют git, вы все равно можете сделать это, сначала переведя свою историю на GIT, например, с портной.

Рефейс

Git позволяет легко повторно нанести часть истории с другой отправной точки, переживать. Анкет Таким образом, вы также можете просто клонировать Magento, работать со своим кодом и при обновлении Magento, выполняя это с последнего чистого ревизии Magento, а затем переживая вашу работу над новым ревизией Magento.

Вы в основном следите за рабочим процессом стеганого одеяла с обычными инструментами GIT.

ветви

Еще один способ сделать это - просто использовать филиалы. Вы клонируете репо Magento, от этого, делаете свое дело, и когда вы получаете последние изменения Magento, вы объединяете две ветви. Это просто Типичный рабочий процесс DVCS, рассматривая вас как разработчика Magento, работая над филиалом, которая никогда не попадет в главную ветвь ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top