2013-08-18 2 views
0

У меня есть проект базового сайта, который я использую в качестве отправной точки для нескольких клиентов. Каждый клиент может иметь конкретные изменения в проекте, которые я не хочу включать в базовый проект. Однако иногда конкретная функция клиента имеет смысл включить в базовый проект и нажать на всех других клиентов (например, исправления ошибок).Несколько версий проекта git

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

После прочтения тонны статей, это мои выводы до сих пор:

  • Git ветвление не будет хорошо работать в моем сценарии. Мне нужны разные папки для каждого проекта, поэтому я могу запускать сайты одновременно.
  • «Submoduling» базовый код в каждом репо клиента не кажется правильным решением, поскольку база не является подпапкой в ​​проекте, это «проект».
  • Cherrypicking требует Изменения базового пульта дистанционного управления, чтобы быть добавлены к проекту клиента и кажется сложным (и я haven't был в состоянии сделать его работу до сих пор)

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

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

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

ответ

0

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

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

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

+0

Средняя часть вашего ответа выглядит интересной. Однако, если у меня есть только один репозиторий, тогда все ветки будут существовать в этом хранилище, что может быть довольно сложно поддерживать. Представьте, что каждый клиент имеет собственный жизненный цикл с ветвями развертывания/исправления/развития. Я предполагаю, что я действительно хотел бы (концептуально) развить основной проект для каждого клиента, но, по-видимому, это невозможно. – jbc

+0

Хмм, я нашел это обходное решение http://bitdrift.com/post/4534738938/fork-your-own-project-on-github для разметки собственных проектов. Думаю, я попробую.Единственное, что у меня есть, это то, что я смогу вытащить только определенные изменения, и если я смогу подтолкнуть изменения от проекта клиента к базе. – jbc