6

我是 Git 的新手。

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

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

在示例中(与主题分支的合并和补丁贡献者的集成未显示,“next”、“pu”的其他分支此处也未显示)。

这些图像也可以在这里查看

          +--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”应该移动到与“master”相同的位置?如何 ?
  2. 之后如何从分支“master”创建一个分支“maint”?
  3. 如果出现旧的“tag:maint-rel v1.0.1”的补丁(经过很长时间,例如当前的feature-release v10.0),如何将其集成到“maint”和“master”中“?

谢谢。

4

1 回答 1

2

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

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

1/如何处理“维护”分支?我知道指针“maint”应该移动到与“master”相同的位置?如何 ?

我不确定你为什么要在这里重用 maint。变基是行不通的。
可能是一个

$ git checkout maint
$ git reset --merge c102

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

我刚刚测试了它:

替代文字 http://img188.imageshack.us/img188/4425/resetmerge.png

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

2/然后如何从分支'master'创建一个分支'maint'的分支?

好吧,重置会将“维护”的负责人转移到当前的开发中:如果 C102 是 v2,那么您只需要检查“维护”,然后您就会立即分叉。

这会给你:

替代文字 http://img36.imageshack.us/img36/91/resetmerge2.png

3/如果出现旧的“tag:maint-rel v1.0.1”的补丁(经过很长时间,例如当前的feature-release 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(可能已经发展得如此之多以至于大多数补丁不再相关)中合并相同的东西

于 2009-09-11T10:31:54.633 回答