2010-10-29 79 views
3

我用的是垫底的特性分支流程http://www.golden-gryphon.com/software/misc/packaging.html的Git - 上游+功能+分支发布分支

但由于本地测试者和管理员不喜欢一次性发布分支,我需要移动与稳定分支的worklow 。

唯一可以接受的是合并工作流程。现在的问题是我不知道如何在这个工作流中使用相关的功能分支。重新绑定时,这很简单,每个补丁都简单地重新设置了所有依赖此分支的功能分支,并且一切恢复正常。通过合并工作流程,我无法重设我的功能分支,但合并似乎对此有点疯狂。

有没有更好的方法?

+0

链接是死的,但它是在http://web.archive.org/web /20111230235724/http://www.golden-gryphon.com/software/misc/packaging.html – 2013-05-28 07:34:02

回答

5

与几个长期的特点,模型可能是这样的:

 o-----o bugfix 
    /  \ 
o--o--o------o------o develop branch 
     \  \  \ 
     o-o----o---o--o long-term feature 1 
      \ \ \ \ 
      o--o-o-o-o--o--o feature 2 

基本上,你有一个发展分支,合并错误修正你的开发分支。长期功能分支是开发分支的基础,您可以通过合并来自该开发分支的新更改来更新它。

同样,基于特征1,你有一个特征分支2,并且你通过合并新东西新特征1分支来更新它。

当功能1完成后,你把它合并到开发和更新功能2从开发分支:

 o-----o bugfix 
    /  \ 
o--o--o------o------o---o---o develop branch w/ feature 1 
     \  \  \/ \ 
     o-o----o---o--o  \ 
      \ \ \ \  \ 
      o--o-o-o-o--o--o--o-o feature 2 
+0

看起来有点类似我现在所在的地方。任何提示用于管理功能分支之间的依赖关系?我有5个功能分支全部用作2个其他功能分支的基础。 – 2010-11-02 15:14:22

+0

我想没有多少人有很多分支机构不能简单地手工同步它们。但我想你可以编写一些脚本来完成所有的同步,并检测可能的冲突和破坏。最困难的是,你必须为每个补丁选择正确的分支(例如,如果你需要一些通用机制来实现“特性2”,并且你将需要它来实现其他功能,那么最好是在一个补丁中实现它祖先的分支) – che 2010-11-02 15:23:59

+0

@Let_Me_Be这取决于你的回购(和一般的软件)是怎样的。从你的评论我猜它是核心 - > {feature1 ... 5} - > {otherfeatures1 + 2} [我真的很讨厌不能把acii-art置于评论中]。如果您有像开发分支这样的中央库,并且您的功能分支仅包含新功能(=没有核心开发),并且这些功能分支不会彼此共享补丁,那么合并工作流程很简单。 – Rudi 2010-11-03 07:02:23

2

合并和rebase工作流的主要区别在于合并在rebase工作流中是不可见的,但它们仍然存在(您可以在rebase之后的reflog中看到它们)。甚至还有更多的使用rebase,因为对于每一个要重新分支的新变更集都会执行它自己的合并,而在纯合并工作流程中,只有两个分支头之间合并完成。

一个典型的合并工作流程是这样的:

   o-o-o--------------o   Release1+bugfixes 
      / \    \ 
o-----o----o--o-o--o---o----o-o-o-o-o--o develop 
     \ /    \ /
     o-o-o Feature 1  o---o Feature 2 

短期功能被开发的发展,长期特征获得自己的分支机构。功能分支被合并回开发。对于每个版本,都是从开发中创建一个分支,并在发生该bug的发布分支上创建错误修正。当一个错误修复完成后,它会被合并回开发。

更好的解释可以在http://nvie.com/posts/a-successful-git-branching-model/找到。

+0

问题是我有几个相互依赖的长期功能分支。您描述的工作流程很简单(几乎是我的大型工作流程的一部分)。 – 2010-10-29 13:11:58