2012-01-25 2 views
6

У меня есть проект, который я управляю из репозитория git. Мы используем стратегию ветвления progit (как описано в принятом ответе, здесь: Git branch strategy for small dev team), где один филиал является производственной ветвью, а другой филиал - ветвью разработки/тестирования. Мы разворачиваем код, используя ткань.Где хранить различия между dev и производственной отраслью в git?

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

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

Один конкретный случай использования, о котором я беспокоюсь, - это если нам нужно сделать исправление. В настоящее время мы делаем это, исходя из производственной среды, внося изменения, а затем объединяем эту ветвь как в разработку, так и в производство. Если производственная ветвь отличается от разработки, могут ли эти изменения втянуться в ветку разработки, когда исправление будет объединено в разработку?

ответ

9

Ваш вопрос в основном сводится к «как мне внести изменения в одну ветвь, а затем, чтобы это изменение не распространялось, когда я сливаюсь в другое?». Это достаточно просто. На данный момент я предполагаю, что ваша производственная ветвь - это всего лишь серия слияний, как из ветви dev, так и из ветки исправления. Таким образом, предположительно, сделав git merge production из вашей ветки развития, никаких изменений не произойдет. Учитывая это, продолжайте и внесите изменения в производственную отрасль. Теперь зафиксируйте их. Теперь просмотрите ветку разработки и запустите git merge -s ours production. Это в основном означает «слияние с производством, но отклоните все об их изменениях». Это создаст фиксацию слияния, но на самом деле не коснется вашей ветви разработки.

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

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

+0

ok, так что это не сработает: когда я перехожу к разработке 'git merge development 'от производства всякий раз, когда я делаю выпуск, различия в ветви разработки заменяют производственные изменения в производственной ветви. мне нужно сохранить изменения, которые не покидают производственную ветвь - они не попадают ни в какую другую ветвь и не перезаписываются какой-либо другой веткой. –

+0

@IgorSerebryany: Если вы вносите изменения в разработку в те же строки, которые вы пытаетесь сохранить в Production, то да, у вас будут проблемы. Каждый раз, когда вы делаете такое изменение, вы должны выполнить слияние «манекенов», чтобы в основном «испечь в камне», как должна выглядеть производственная ветвь по отношению к этим линиям. –

+2

Я сделал следующий деликатный балет: (1) убедился, что две ветви синхронизированы; (2) я применил свои изменения к производственной ветви (3) 'git merge -s ours production' из ветки развития; (4) «git merge -s ours development» из производственной отрасли. в результате я думаю, что добрался до состояния, которое хотел, где мои изменения не сбиваются с толку и не переносятся с производства. –

0

У меня также есть этот запрос в филиале и филиале dev. Я не думаю, что git merge -s ours ** является хорошим решением, потому что он может просто гарантировать, что более позднее одно слияние не будет перезаписано, и после этого это будет причиной родительского отношения между dev и production. Вы каждый раз должны использовать git merge -s ours **, и это сделает журнал граф действительно уродливым и бессмысленным.

Поэтому я рекомендую использовать

мерзавец вишневого выбрать

. Это обеспечивает контент, который вы хотите вытащить.

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