Рекомендуемый рабочий процесс для нескольких модулей (тем) - PullRequest
3 голосов
/ 18 января 2011

У меня есть приложение (cms), структура которого выглядит следующим образом:

BASE:
    /application/
    /public/
        themes/
           default/
           mobile/

Это базовый, центральный репозиторий для всех наших проектов.Затем проекты получают свой собственный скин: (, основанный на /default/ theme )

CLONE1:
    /application/
    /public/
        themes/
           default/
           mobile/
           own/
           ...
           own-theme-12/

(это приложение имеет 12 пользовательских тем, основанных на теме по умолчанию).

Все дело в поддержании приложений и обновлении всех клонов с помощью BASE.

Теперь мы добавим BASE в качестве удаленного репо:

(/clone1/)$ git remote add base-repo /path/to/base.git

Затем потяните заобновления при необходимости:

(/clone1/)$ git pull base-repo develop

Когда .php файлы в /application изменены, все работает отлично.Проблема начинается, когда мы изменяем файлы в теме default в репозитории BASE (например, опечатка в reset.css).Нам нужны эти изменения в теме CLONE1/default и во всех темах CLONEx/own-x/.

Конечно, потребуется некоторый скрипт bash, чтобы указать, куда копировать и фиксировать изменения, но как сохранить все это всинхронизировать без конфликтов слияния?

Мы используем git flow.Темы default и mobile пока не находятся в отдельных ветках.Нужны ли они нам?Мы пока не используем подмодули.

Есть много способов организовать этот рабочий процесс, но какой из них вы бы выбрали как оптимальный?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

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

Если вы создаете два поддерева на верхнем уровне: одно для вышестоящего приложения, а другое для тем, вы можете затем разделить / объединить их с помощью git-subtree. Темы, унаследованные от апстрима, могут быть символически связаны из каталога приложения в директорию тем. Таким образом, вы получите что-то вроде этого:

    /app/code/*.php
    /app/themes/default/
    /app/themes/mobile/
    /themes/default -> ../app/themes/default
    /themes/mobile -> ../app/themes/mobile
    /themes/own-1/

Когда вы хотите отправить изменения приложения вверх по течению, вы делаете что-то вроде

    git subtree split --prefix=app --rejoin
1 голос
/ 18 января 2011

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

В остальном сценарий, выполняемый как драйвер слияния , может:

  • объединить содержимое BASE/default с local/default
  • , проверить, существует ли один и тот же файл (например, reset.css, в других каталогах, и начать сообщать о таких же изменениях в нем).).

У меня нет точных сведений о точном механизме, но я подозреваю, что драйвер слияния является хорошей точкой входа для распространения изменений.

...