我读过
- 《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
此时我有几个问题:
- 如何处理“maint”分支?我理解指针“maint”应该移动到与“master”相同的位置?怎么样?
- 然后如何从分支“master”分支分支“maint”?
- 如果出现针对旧“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/