Git - 上游 + 功能分支 + 发布分支

3

我曾经使用过基于变基的主题分支工作流http://www.golden-gryphon.com/software/misc/packaging.html

但由于本地测试人员和管理员不喜欢一次性发布分支,我需要转向具有稳定分支的工作流程。

唯一可接受的是合并工作流。现在问题是我不知道如何在这个工作流中处理依赖功能分支。当进行变基时,这很简单,对于每个补丁,我只需重新基于所有依赖于此分支的功能分支,一切就恢复正常了。但是,在合并工作流中,我无法变基我的功能分支,但对于此来说,合并似乎有点疯狂。

是否有更好的方法?


链接已经失效,但可以在http://web.archive.org/web/20111230235724/http://www.golden-gryphon.com/software/misc/packaging.html 找到它。 - Tobias Kienzler
2个回答

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

看起来和我现在的情况有点相似。在管理特性分支之间的依赖关系方面有什么建议吗?我有5个特性分支,它们都被用作其他2个特性分支的基础。 - Šimon Tóth
我猜不多的人会有那么多分支,无法简单地手动同步它们。但是我猜你可以编写一些脚本来完成所有同步,并检测可能的冲突和/或破坏。最困难的事情是你将不得不为每个补丁选择正确的分支(例如,如果你需要一些通用机械来支持“功能2”,并且你将需要它来支持其他功能,最好在其中一个祖先分支中实现它)。 - che
@Let_Me_Be 这取决于你的仓库(以及软件)的外观。从你的评论中,我猜想它是core->{feature1...5}->{otherfeatures1+2} [我真的很讨厌不能在评论中放置ASCII艺术]。如果你有一个像开发分支这样的中央库,并且你的特性分支只包含新功能(=没有核心开发),并且这些特性分支彼此之间不共享补丁,则合并工作流程很容易。 - Rudi
3
“又被SO中断了,grml。”主要问题是保持纪律,按照正确的分支开发产品的每个方面,避免在分支之间挑选补丁。此外,后台自动化类似CI的合并测试系统对及早发出警报非常有帮助,如果核心或特性的某些更改沿着合并链会破坏东西。” - Rudi

2
合并工作流程和变基工作流程的主要区别在于,在变基工作流程中合并是不可见的,但它们仍然会发生(您可以在变基后的reflog中看到它们)。使用变基甚至会有更多的合并,因为对于要被变基的分支的每个新变更集,都会执行自己的合并,而在普通合并工作流程中只会执行两个分支头之间的一次合并。
典型的合并工作流程如下:
             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

短期功能在开发中被开发,长期功能则有自己的分支。功能分支合并回开发分支。对于每个版本发布,都会从开发中创建一个分支,并在出现错误的发布分支上创建错误修复程序。当错误修复完成后,它会合并回开发分支。
更好的解释可以在http://nvie.com/posts/a-successful-git-branching-model/找到。

问题在于我有几个相互依赖的长期特性分支。你所描述的工作流程是微不足道的(并且基本上是我的更大工作流程的一部分)。 - Šimon Tóth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接