git - 如何在不创建长期分支的情况下维护旧版本?

标签 git git-branch release-management

我读过

  • 《Pro Git:维护项目》一书
  • Git:文档/howto/maintain-git.txt

如何在不创建单独的长期分支的情况下维护旧版本?换句话说,我对如何在 Git 存储库中使用分支“maint”感兴趣。

例如(与主题分支的 merge 和补丁贡献者的整合未显示,“next”、“pu”的其他分支在此也未显示)。

也可以查看这些图像 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”和在“大师”中?

最佳答案

how to mantain the old releases without creating a separate long-lived branches

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

1/ What to do with the branch "maint" ? I understand pointer "maint" should be moved in the same position as the "master" ? How ?

我不确定您为什么要在这里重用 maint。 rebase 不起作用。
可能是一个

$ git checkout maint
$ git reset --merge c102

因为“maint”已经 merge 到 master 中,我猜这次重置不会更新 master 中的任何新文件。

我刚测试过:

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

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

2/ Afterwards how then to make a fork of a branch 'maint' from branch 'master' ?

好吧,重置会将“maint”的负责人移至当前开发:如果 C102 是 v2,您只需要检查“maint”,您就会立即进行 fork 。

这会给你:

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

3/ if appear a patch (elapse a very long time, for example, the current feature-release v10.0 ) for the old "tag:maint-rel v1.0.1", how to integrate it in the "maint" and in "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 中完成修复的某些部分)和 master(可能已经发展得如此之多以至于大部分补丁不再相关)中 merge 相同的东西

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

相关文章:

MacOS终端: how to use a seccond ssh key?

git - 为什么git需要stash save-pop来切换分支?

node.js - 维护单独的 git 分支 - 一个用于 heroku,另一个用于 github

release-management - 部署队列不显示我的默认本地构建代理

build-process - 应用程式建立/部署工作流程

cakephp - 如何处理一个 CakePHP Web 应用程序的多个安装的部署和更新?

git - 如何重新开始跟踪从 git 索引中删除的目录/文件?

node.js - 如果 webpack 构建失败则中止 post-receive Hook

windows - 错误的解释器 : Permission denied error when running Ruby from Git Bash

git - 在 git rebase 期间查找分支名称