2009-09-11 1 views
6

Я новичок в Git.Mantain старые релизы без создания долгоживущих ветвей

Я прочитал: "Pro Git: Ведение проекта" (книга) и Git: Документация/HOWTO/сохранить-git.txt

Сложный вопрос для меня: как его поддерживать старые релизы без создавая отдельные долгоживущие ветви. Другими словами, мне интересно, как работать с веткой «maint» в проекте Git.

В примере (слияние с ветками темы и интеграция вкладчиков патчей не показаны, здесь также не показаны другие ветви «next», «pu»).

Эти изображения можно посмотреть также at here.

  +--master 
      | 
      +--maint 
      | 
    (c1)->(c2) 
      | 
      +--tag : feature-release v1.0 

В следующий раз:

tag:feature-rel v1.0--+     +--master 
         |     | 
       (c1)->(c2)->(c)->(c)->(c)->(c) 
         | 
         +->(c)->(c)->(c) 
            | 
            +--maint 
            | 
            +--tag:maint-rel v1.0.1 

Далее, как описано в разделе "сохранить-git.txt", запустите:

$ git checkout master 
$ git merge maint 

Результат:

tag:feature-rel v1.0--+       +--master 
         |       | 
       (c1)->(c2)->(c)->(c)->(c)->(c)->(c100) 
         |      /
         +->(c)->(c)->(c50)-----' 
            | 
            +--maint 
            | 
            +--tag:maint-rel v1.0.1 

В следующий раз :

       +--master 
           | 
           +--tag:feature-rel v2.0 
           | 
    ...->(c)->(c100)->(c101)->(c102) 
      /
...->(c50)---' 
     | 
     +--maint 
     | 
     +--tag:maint-rel v1.0.1 

И в этот момент у меня есть несколько вопросов:

  1. Что делать с ответвлением «Техно»? Я понимаю, что указатель «maint» должен быть перемещен в том же положении, что и «мастер»? Как ?
  2. После чего как сделать вилку ветки «maint» из ветки «master»?
  3. Если появляется патч (например, текущий выпуск-релиз v10.0), для старого «тега: maint-rel v1.0.1», как его интегрировать в «maint» и в «хозяине»?

Спасибо.

ответ

3

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

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

1/Что делать с веткой «maint»? Я понимаю, что указатель «maint» должен быть перемещен в том же положении, что и «мастер»? Как ?

Я не уверен, почему вы будете использовать его здесь. rebase не будет работать.
Может быть

$ git checkout maint 
$ git reset --merge c102 

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

Я просто проверял:

alt text http://img188.imageshack.us/img188/4425/resetmerge.png

Это делает движение главу 'MAINT', не касаясь какими-либо файлы в мастере.

2/После чего как сделать вилку ветки «maint» из ветки «master»?

Ну сброс бы переместить голова «» MAINT к текущему развитию: если C102 является v2, все, что вам нужно, это проверка «Мейнта», и вы бы раскошелиться сразу.

Это даст вам:

alt text http://img36.imageshack.us/img36/91/resetmerge2.png

3/если появится патч (истечь очень долго, например, текущая функция-релиз v10.0) для старого «тега : maint-rel v1.0.1 ", как интегрировать его в« maint »и« master »?

Там вам нужно создать «под названием ветви обслуживания»:

$ git checkout -b maint-1.0 c50 
$ # work on patch 
$ git checkout maint 
$ git cherry-pick ... # only merge what you need in maint 
$ git checkout master 
$ git cherry-pick ... # only merge what you need in maint 

Примечание: Вы можете не сливаясь тем же самым в MAINT (который все еще может понадобиться какая-то часть исправления сделано в MAINT -1.0) и мастер (который, возможно, развился настолько, что большая часть патча больше не актуальна)

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

  • Нет связанных вопросов^_^