2009-10-12 7 views
4

После моего first question идентификатор хотел бы получить подтверждение о лучшем рабочем процессе git в моем случае.тот же проект, несколько клиентов git workflow

У меня есть один проект Джанго, размещенный на GitHub, и дифферент клоны с каждой своей собственной отраслью: customerÃ, customerB, демы ... (думают, веб-сайты)

Филиалов один и то же ядро, но есть данные, дифферент и (они находятся в gitignore)

Когда я работаю на ветке CustomerA, как мне следует реплицировать некоторые исправления ошибок другим развертываниям?

Когда я создаю новую общую функцию, я создаю специальную ветвь, а затем объединяю ее в мой мастер. Затем, чтобы развернуть на «клиентах», я объединить главную ветвь в ветку клиента. Правильно ли это? или я должен переустанавливать?

# from customerA branch 
git fetch origin master 
git merge origin master 

Кроме того, я создал удаленную ветку для каждого клиента, чтобы я мог создавать резервные копии филиалов клиентов в github.

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

Спасибо.

Ju.

ответ

2

У меня было бы одно репо проекта в известном месте, содержащем ведущую ветвь с общим кодом, и ветви для конкретных развертываний (например, клиент/клиент/B-демонстрация).

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

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

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

Я видел, что это решение описывает где-то гораздо более подробно где-то в Интернете, но я не мог найти его быстро. Некоторые сообщения в блоге об использовании git для промежуточного и производственного веб-сервера, IIRC.

+0

Спасибо. То как im делает фактическ. Когда в развертывании customerA я делаю это, чтобы обновить код из главного ветви: git pull origin master git merge master Это правильный путь? – jujule

+0

Извините, на самом деле это то, как они делают из филиала customerA: git fetch origin; git merge origin master; Правильно ли это? – jujule

0

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

+0

Вы говорите, что лучше отделить клиента от репо вместо ветвей? Почему это? –

+0

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

+0

, но что делать, если у меня есть исправление ошибки, которое затрагивает всех клиентов? Мне нужно будет обновить все репозитории вручную, чтобы интегрировать исправление. – dit

1

Если три сайта имеют определенный код ядра (например, приложение Django), вы должны включить это ядро ​​в свое собственное репо и использовать git submodules, чтобы включить его в другие проекты, а не дублировать его.

+0

thanx. на самом деле мои клиенты используют одни и те же приложения, но некоторые из них настроены, поэтому я использую одно репо. Я добавляю подмодуль, когда у меня есть пользовательское приложение для клиентов. – jujule

0

Не отделяйте проекты от ветвей и не разделяйте их на разные хранилища.

Сделайте общий код достаточно общим, чтобы копия общего кода costumerA была точно такой же, как копия общего кода costumerB.

Затем вам не нужно тянуть или слить что-либо. Когда вы обновляете общий код, как costumerA, так и costumerB автоматически получат обновление (потому что они используют один и тот же общий код).

«Обычным» кодом: я имею в виду пакет/ряд приложений, которые поддерживают веб-сайты, которые вы разрабатываете.

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

Ключом здесь является общий код: не позволяйте costumerA использовать «слегка модифицированную версию» «общего» кода.

Кроме того, я бы предложил использовать механизм развертывания, который не полагается на git. git - отличный инструмент для управления исходным кодом; но он не разработан (AFAIK) как инструмент развертывания.

Смежные вопросы