Лучшие практики использования Git с Magento?

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

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

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

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

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

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

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


person acorncom    schedule 30.12.2010    source источник
comment
Вот полезная запись в блоге об идеальном рабочем процессе Magento/git: dhmedia.com.au/blog/perfect-magento-workflow-using-git   -  person Sam152    schedule 24.12.2011


Ответы (5)


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

person Johann Reinke    schedule 01.03.2012
comment
Сладкий. Это похоже на то, что я был после. Спасибо!! - person acorncom; 02.03.2012

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

В настоящее время я использую pear для установки и управления обновлениями ядра и сообщества. модули и зафиксировать всю структуру 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 — стоит поискать.

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

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

Спасибо.

person wik    schedule 10.03.2011

Похожий на квилт рабочий процесс

Это именно то, что раньше делалось с quilt, а сейчас вы делаете с Stacked Git (поверх Git ), Mercurial Queues (поверх Hg) или Loom (поверх Bazaar).

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

Чистый git

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

Перебазировать

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

Вы в основном следуете рабочему процессу Quilt с помощью обычных инструментов Git.

ветви

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

person Nowhere man    schedule 21.07.2011

Ваш вопрос больше о подмодуле git по сравнению с поддеревом в целом. Я не могу придумать какие-либо особенности Magento, которые повлияют на сравнение. Скорее всего, вы знакомы с стратегиями слияния поддеревьев. который я порекомендую, но я не уверен, зачем вам нужно объединяться в первую очередь.

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

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

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

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

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

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

person Yauhen Yakimovich    schedule 23.01.2011

Мне кажется, вы говорите о разных вещах.

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

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

Я сделал запись о том, как мы используем git как команду для управления магазинами magento здесь, возможно, это будет вам полезно:

Рекомендации по развертыванию Magento

person Greg Robbins    schedule 09.06.2011