Объединение изменений из мастера во все ветви с помощью Git? - PullRequest
13 голосов
/ 25 февраля 2010

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

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

Эта система хорошо работает для меня, за исключением того факта, что я должен извлечь ветку, объединить мастер и промыть / повторить для других ветвей. Учитывая систему контроля версий, такую ​​как git, я не вижу такого масштабирования, учитывая тот факт, что со временем я буду склонен к появлению большого количества ветвей.

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

Ответы [ 3 ]

6 голосов
/ 25 февраля 2010

Если

  1. ветви, в которые вы хотите объединить последние мастер-коммиты, не публикуются И
  2. вы хотите, чтобы все коммиты в master были в других ветках

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

for BRANCH in `ls .git/refs/heads`; do git rebase master $BRANCH; done
5 голосов
/ 25 февраля 2010

Одна возможность (не проверенная мной) будет:

  • для создания чистого репо, куда вы можете вставить свою основную ветку.
  • имеет хук для пост-получения (см. справочную страницу githooks ) в этом голом репо, который затем будет толкать мастера на каждом желаемом репо "Feature"
  • иметь репозиторий после получения для репозитория функций:
    • перебазирование вашей функциональной ветви поверх мастера (хорошо, если вы еще не перенесли свою функциональную ветку в другое место)
    • или слияние мастера в вашей ветви функций.

Вам все равно нужно будет вернуться к своему репозиторию и проверить, не заблокирован ли перебазирование или слияние из-за некоторых конфликтов слияния.

0 голосов
/ 09 апреля 2016

следующее проверяет каждую ветвь и выполняет слияние:

   for BRANCH in $(ls git/refs/heads);
     do git checkout $BRANCH ; 
     git merge origin/master $BRANCH ; 
   done
...