我是Git的新手.
我读过:"Pro Git:维护一个项目"(书)和Git:Documentation/howto/maintain-git.txt
对我来说很棘手的问题:如何在不创建单独的长期分支的情况下保留旧版本.换句话说,我感兴趣的是如何在项目Git中使用分支"maint".
在示例中(与主题分支合并并且未示出补丁的贡献者的集成,"下一个","pu"的其他分支也未在此示出).
这些图像也可以在这里查看.
+--master
|
+--maint
|
(c1)->(c2)
|
+--tag : feature-release v1.0
Run Code Online (Sandbox Code Playgroud)
下次:
tag:feature-rel v1.0--+ +--master
| |
(c1)->(c2)->(c)->(c)->(c)->(c)
|
+->(c)->(c)->(c)
|
+--maint
|
+--tag:maint-rel v1.0.1
Run Code Online (Sandbox Code Playgroud)
接下来,如"maintain-git.txt"中所述,运行:
$ git checkout master
$ git merge maint
Run Code Online (Sandbox Code Playgroud)
结果:
tag:feature-rel v1.0--+ +--master
| |
(c1)->(c2)->(c)->(c)->(c)->(c)->(c100)
| /
+->(c)->(c)->(c50)-----'
|
+--maint
|
+--tag:maint-rel v1.0.1
Run Code Online (Sandbox Code Playgroud)
下次:
+--master
|
+--tag:feature-rel v2.0
|
...->(c)->(c100)->(c101)->(c102)
/
...->(c50)---'
|
+--maint
|
+--tag:maint-rel v1.0.1
Run Code Online (Sandbox Code Playgroud)
在这一点上,我几乎没有问题:
谢谢.
如何在不创建单独的长期分支的情况下维护旧版本
维护分支通常是针对每个版本进行的,并且是长期存在的,因为它们用于修复特定于该版本的错误,而不是所有内容都需要合并回当前的开发中。
1/如何处理分支“maint”?我理解指针“maint”应该移动到与“master”相同的位置?如何 ?
我不确定你为什么要在这里重用维护。变基是行不通的。
可能是一个
$ git checkout maint
$ git reset --merge c102
Run Code Online (Sandbox Code Playgroud)
由于“maint”已经合并到 master 中,我想这次重置不会更新 master 中的任何较新文件。
我刚刚测试过:
替代文本http://img188.imageshack.us/img188/4425/resetmerge.png
它确实移动了“maint”的头,而不触及 master 中的任何文件。
2/ 然后如何从分支“master”创建分支“maint”的分叉?
好吧,重置会将“maint”的头部移至当前开发:如果C102是v2,您所需要做的就是签出“maint”,然后您将立即分叉。
这会给你:
替代文本 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
Run Code Online (Sandbox Code Playgroud)
注意:您可能不希望在 maint(可能仍然需要 maint-1.0 中完成的修复的某些部分)和 master(可能已经发展得如此之多,以至于大部分补丁不再相关)中合并相同的内容
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |