我是Git的新手。

我读过了:
“Pro Git:维护项目”(本书)

Git:文档/howto/maintain-git.txt

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

在示例中(未显示与主题分支 merge 和补丁贡献者的集成,
“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

接下来,如“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

现在,我有几个问题:
  • 如何处理分支“maint”?我知道指针“maint”应与“master”移到相同的位置吗?如何 ?
  • 然后如何从分支“master”制作分支“maint”的派生叉?
  • 如果出现旧版“tag:maint-rel v1.0.1”的补丁(例如,经过很长时间,例如当前的功能版本v10.0),那么如何将其集成到“maint”和“掌握”?

  • 谢谢。

    最佳答案



    维护分支通常是针对每个发行版而存在的,并且是长期存在的,因为它们可用于修复特定于该发行版的错误,并且不需要将所有内容都 merge 回当前的开发中。



    我不确定为什么您会在这里重用maint。重新设置将不起作用。
    可能是

    $ git checkout maint
    $ git reset --merge c102
    

    由于“maint”已经 merge 到master中,因此我猜想此重置不会更新master中的任何较新文件。

    我只是测试了一下:

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

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



    好了,重置操作会将“maint”的头移到当前的开发中:如果C102是v2,您所需要做的就是 checkout “maint”,然后您将立即 fork 。

    那会给你:

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



    在这里您需要创建一个“命名维护分支”:
    $ 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中完成部分修复)中 merge 相同的内容,而在master(可能已发展得如此之多,以至于大部分补丁不再相关)中 merge 。

    关于git - 维护旧版本而不创建长期存在的分支,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1410051/

    10-14 04:07