GIT: Каков наилучший рабочий процесс в этой ситуации? - PullRequest
2 голосов
/ 09 ноября 2009

У меня проблемы с этой ситуацией:

У меня есть базовый репозиторий, который содержит папки «docs», «layout», «pub» и «sql», в папке «docs» и «layout» просто есть пустой «index.html». В папке 'pub' у меня установлен Joomla.

Когда у меня появляется новый клиент, я создаю его каталог и запускаю репозиторий, затем добавляю удаленный сервер с именем «base», указывающий на базовый репозиторий bare (тот, что с Joomla), извлекаю его, извлекаю base / master и затем выполняю 'checkout -b master', чтобы создать основную ветку из основной ветви базы. Затем я делаю 'clone --bare' репо клиента на моем локальном сервере и клонирую его на локальных рабочих станциях. Мы сохраняем документы, когда это необходимо, дизайнер делает макет, а затем фиксирует его и передает в репозиторий клиента. Мы всегда делаем «rebase origin / master» перед нажатием, чтобы убедиться, что локальное репо обновлено.

Итак, когда макет сделан и нажат, я вытаскиваю его и начинаю делать шаблон Joomla. Поэтому я делаю много коммитов, а потом понимаю, что мне нужно внести изменения в компонент Joomla. Хорошо, я изменяю компонент, фиксирую и продолжаю делать шаблон, фиксирую, ...

Теперь я хочу перенести все коммиты компонента Joomla в «базовое репо», потому что я хочу, чтобы все мои клиенты имели одинаковые изменения. Когда я попробовал решение @jleedev (перебазирование), все коммиты моего клиента пошли наверх, переписав его SHA, которые уже были в голом репо клиента.

Основная идея заключается в том, чтобы коммиты файлов находились в папках 'docs', 'layout', 'pub / templates / client_template' и, возможно, какой-то хак Joomla только для этого клиента, уникального для репо клиента, но все остальные коммиты Я также хотел бы иметь в «базовом» репозитории Joomla, чтобы я мог объединить все репозитории клиентов.

Есть идеи? Может быть, другая организация?

Заранее спасибо!

Ответы [ 5 ]

1 голос
/ 19 ноября 2009

Так что, когда макет сделан и нажат, я вытаскиваю его и начинаю создавать шаблон Joomla . Поэтому я делаю много коммитов, а потом понимаю, что мне нужно внести изменения в компонент Joomla . Хорошо, я изменяю компонент, фиксирую и продолжаю делать шаблон, фиксирую, ...

Теперь я хочу перенести все коммиты компонента Joomla в «базовое репо», потому что хочу, чтобы все мои клиенты имели одинаковые изменения

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

  • Вы можете изменить подмодуль непосредственно в репо клиента, а затем отправить его в центральное репо
  • Вы можете обновить свои клиентские репозитории последней версией этого компонента Joomla.

Другие каталоги останутся специфичными для клиента.

0 голосов
/ 08 декабря 2009

Этот вопрос выглядит почти как проблема наследования (в отношении вашей организации).

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

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

0 голосов
/ 05 декабря 2009

Чтобы получить то, что у вас есть сейчас, в base / master, вы можете попробовать это: В репозитории клиента создайте «базовую» ветку в base / master. (git checkout -b base base / master). Тогда черри выбирают коммиты Joomla, которые вы хотите отодвинуть обратно в базу. Затем нажмите базу на базу / мастер.

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

Существуют приемы для удержания двух разных деревьев в одном репо; Может быть, это то, что вы должны использовать. Прочитайте http://progit.org/book/ch6-7.html и посмотрите, может ли эта идея сработать в вашей ситуации, когда вы хотите сохранить слегка модифицированный Joomla и другие репо.

0 голосов
/ 23 ноября 2009

Я думаю, что эта проблема выходит за рамки git.

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

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

Один из способов заставить себя сделать это - заставить их всех использовать одно и то же «обычное» репо; не клон этого. Вы можете использовать символические ссылки для базы / общего кода, например.

0 голосов
/ 09 ноября 2009

Возможно, вы могли бы внести изменения, которые вы хотите, чтобы все клиенты имели непосредственно в вашем базовом репозитории Joomla. А затем объединить это со всеми клиентскими репозиториями.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...