维护旧版本而不创建长期分支

时间:2009-09-11 09:53:16

标签: git branch maintenance

我是Git的新手。

我看过: “Pro Git:维护项目”(书) 和 Git:Documentation / howto / maintain-git.txt

对我来说是个棘手的问题:如何在不创建单独的长期分支的情况下保留旧版本。 换句话说,我感兴趣的是如何在项目Git中使用分支“maint”。

在示例中(与主题分支合并并且未显示补丁的贡献者的集成, 其他分支的“下一个”,“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

接下来,如“maintain-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”?我理解指针“maint”应该移动到与“master”相同的位置?怎么样?
  2. 然后如何从分支“master”中创建一个分支“maint”的分支?
  3. 如果出现旧版“tag:maint-rel v1.0.1”的补丁(经过很长时间,例如当前的功能版本v10.0),如何将其集成到“maint”中在“主人”?
  4. 感谢。

1 个答案:

答案 0 :(得分:2)

  

如何在不创建单独的长期分支的情况下保留旧版本

维护分支通常在每个版本中完成,并且寿命很长,因为它们用于修复特定于该版本的错误,并不是所有内容都需要合并回当前开发。

  

1 /如何处理分支“maint”?我理解指针“maint”应该移动到与“master”相同的位置?怎么样?

我不知道为什么你会在这里重复使用maint。变基不起作用。
可能是

$ git checkout maint
$ git reset --merge c102

由于'maint'已经合并为master,我想这个重置不会更新master中的任何新文件。

我刚试过它:

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

它确实会移动'maint'的HEAD,而不会触及master中的任何文件。

  

2 /之后如何从分支'master'制作分支'maint'的分支?

重置会将'maint'的头部移动到当前的开发中:如果C102是v2,你只需要检查'maint',你就会马上分叉。

那会给你:

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

  

3 /如果出现旧补丁“tag:maint-rel v1.0.1”的补丁(经过很长时间,例如当前的功能发布版本v10.0),如何将其集成到“maint”中“和”主人“?

您需要创建“命名维护分支”:

$ 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中完成修复的某些部分)和master(可能已经进化得太多以至于大多数补丁不再相关)