Контроль версий для разработки модулей


22

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

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

В настоящее время я занимаюсь разработкой его внутри своего репозитория сайта, и в скором времени планирую разбить его на отдельный репозиторий. На этом этапе я, вероятно, сделаю следующее:

  • Сборка в моей локальной среде в отдельном репозитории модулей с использованием modman
  • Скопируйте изменения в репозиторий сайта, когда я буду готов к развертыванию кода

Надеетесь, что есть лучший способ?


ты пробовал композитор?
— FlorinelChis

В какой-то момент я немного поиграл с этим, но серьезно не использовал его. Вам это нравится?
— Календжордан

да, на недавнем Magento Meetup в Лондоне была презентация Vinai о композиторе. его использование варьируется от случая к случаю инфраструктуры (один веб-сервер, несколько веб-серверов). Зависит от предпочтений.
— FlorinelChis

Ответы:


16

У нас есть несколько модулей, где мы это сделали, и то, что мы по сути сделали:

  • Настройте Git-репо для модуля.
  • Разверните этот модуль в кодовой базе рабочего сайта и передайте все, включая:
    • софт-ссылки созданные модманом
    • каталог .modman, в котором находится клонированный репозиторий модулей
  • Используйте modman, чтобы «развернуть» его в других версиях и / или среде разработки для разработки и тестирования.

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

ОБНОВЛЕНИЕ: Когда я первоначально написал это, я не учел в своем ответе, что Git не позволяет (суб) модулям быть зафиксированными в репозитории, и в этом случае «фиксация всего» требует некоторой проработки!

Кстати, это потому, что я делал это чаще, используя modman для развертывания модулей, размещенных в репозиториях Git, в производственную кодовую базу, размещенную в SVN… и у Subversion нет никаких препятствий, мешающих ему передать все дерево Git в VCS.

Так что здесь идет ...

  1. Если вы используете SVN для размещения кода рабочего сайта, у вас не должно быть проблем, поскольку Subversion (практически) не имеет понятия о субмодулях. Это не будет возражать.

  2. Если вы используете Git для кода производственного сайта, вам придется использовать подмодули, чтобы «зафиксировать все» в хранилище кода сайта. После использования modman для клонирования чего-то подобного:

    modman clone ssh://git@bitbucket.org/<user>/<repo>.git

    Вы также захотите добавить его как субмодуль, например так:

    git submodule add ssh://git@bitbucket.org/<user>/<repo>.git .modman/<repo>

    Как только вы это сделаете, вы сможете добавить в индекс каталог .modman и файл .gitmodules и зафиксировать его.

    После клонирования репозитория, использующего эти модули, установленные через modman, просто инициализируйте подмодули и обновите:

    git submodule init
    git submodule update

PS Теперь я использую Git на всех новых проектах, так что, надеюсь, такого упущения больше не будет. Извините ребята. ;)


Вау, это звучит потрясающе. Я собираюсь дать этому вращение.
— Календжордан

Вы также рассматривали подмодули в git?
— FlorinelChis

Подмодули требуют, чтобы все было в одном каталоге. Модман по сути создает программные ссылки для всего, что позволяет распространять его по всей структуре каталога.
— Давиджер

Когда вы говорите, что фиксируете все, включая данные modman, вы подразумеваете фиксацию символических ссылок, которые находятся в структуре каталогов проекта? Когда я git add -A, вот что я получаю: monosnap.com/image/X1EoGyK12UQfYDUqA9hvpUUwq Использование команды modman, похоже deploy, не делает ничего отличного от cloneкоманды - она ​​просто символически связывает файлы (хотя для работы не требуется VCS) ,
— Календжордан

Это верно, все, включая мягкие ссылки. Должен был отметить это выше, но ключевой момент здесь заключается в том, что программные ссылки относительны, поэтому они работают в разных средах. Старые версии modman не поддерживали их. Если вы их не фиксируете, вам нужно игнорировать их, и вам нужно убедиться, что у вас есть модман для развертывания в других средах. Внутри git сохраняет программную ссылку в виде txt-файла с путем, необходимым для создания ссылки при клонировании.
— Давидгер

7

Похоже, что текущее соглашение заключается в поддержке:

Что касается структуры каталогов, то она минимальная, и желательно, чтобы модуль был установлен в пуле кодов сообщества.

Минимально рекомендуемая структура каталогов:

.
└── app
    ├── code
    │   └── community
    │       └── YourCompany
    │           └── YourModule
    │               ├── Block
    │               ├── Model
    │               │   └── Observer.php
    │               └── etc
    │                   └── config.xml
    ├── design
    │   └── frontend
    │       └── base
    │           └── default
    │               ├── layout
    │               │   └── module.xml
    │               └── template
    │                   └── yourmodule
    └── etc
        └── modules
            └── YourCompany_YourModule.xml

Необязательно / приятно иметь:

  • Целевая страница Github с описанием, некоторыми снимками экрана и некоторыми маркированными функциями.
  • Ссылка на установленный демонстрационный магазин тоже подойдет
  • Скринкаст / двухминутный обзор вашего продукта

Изменить: я мог бы неправильно понял.

Использование комбинаций modman / gitignore может сохранить ваш модуль изолированным от тестовой среды. Используя указанную выше структуру папок, вы можете явно разрешить фиксацию / установку только файлов вашего модуля в репозиторий. В этом случае ответ Дэвида более применим. Поддержка Modman для dev / deploy, похоже, является консенсусом.


Спасибо Фил. Это похоже на некоторую полезную информацию с точки зрения лучшей практики при разработке / публикации модуля, но я больше искал информацию в соответствии с ответом Дэвида.
— Календжордан

4
Upvote только для рисунка ASCII
— Бен Лессани - Sonassi

@teamsonassi: Остерегайтесь, это может быть так же просто, как копировать вывод treeкоманды :-)
— Алекс

Мне было бы все равно, если бы он сделал это через cowsay- искусство ASCII просто заставляет ответы выглядеть хорошо: D
— Бен Лессани - Sonassi

Будь предупрежден, я использую cowsayи figlet.... много .
— Philwinkle

5

Даже не пытаясь сам, я бы порекомендовал использовать композитор для этого.

Управление версиями, включая зависимости

Сохраняя composer.lockфайл в хранилище, вы исправляете версии всех модулей и всегда можете восстановить определенную версию (ветвь, тег или более старую версию), используя вашу VCS ( git checkout, svn ..), а затем composer.phar install.

Недостатки

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

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

Сатис, кажется, может служить этой цели (см. Https://github.com/researchgate/broker ) и мой вопрос /programming//q/16211671/288568


1
Благодаря Artifact (см. getcomposer.org/doc/05-repositories.md#artifact ) зависимость от различных источников легче уменьшить и контролировать. Также позволяет плагинной архитектуре composer кэшировать пакеты, например, на AWS (сейчас не могу найти ссылку на реализацию)
— Flyingmana

Разве модули не должны зависеть друг от друга?
— user2045

2

Кален,

Может быть, я не совсем правильно понял ваш рабочий процесс, но это звучало так, как будто вы разрабатываете в magento репо локально, а затем делитесь на modman репо. Почему бы просто не отредактировать ./modman/modulesname/CONTENTS в вашей среде IDE и передать код в репозиторий модулей независимо в том же рабочем процессе, который вы используете для разработки. вы можете использовать modman для развертывания в производство, вы можете взаимодействовать с отдельным репозиторием в папке .modman / modulesname / из каталога cli или путем добавления источника управления версиями в вашу IDE, хотя в действительности вы используете .basedir, чтобы сохранить пути, связанные с репозиторием, из вашего каталога. webroot будет играть лучше.

Существует также очень приятная особенность модмана, которую многие люди не используют. Сценарий bash интерпретирует файл .basedir в хранилище .modman, если файл не существует, modman применяет правила символической ссылки в файле modman на том же уровне, что и папка .modman ... если файл .basedir существует, содержание описывает подпапку, которая является верхним уровнем вашего кода Magento, который находится ниже пути .modman ... другими словами, вы можете запустить (и я это сделаю) все базовые версии Magento в папках, таких как «BaseMagento1.9.1.0». 'BaseMagento1.14.2.0' и modman инициализируют папку, содержащую их. Добавьте файл .basedir в путь .modman, и вы сможете легко изменить его содержимое. Это хорошо работает для тестирования версии.


Спасибо, интересные вещи! Прошло некоторое время, так как я использовал этот рабочий процесс!
— Календжордан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.