Gitstream和主多个并行版本分支

我们试图采用由git-flow实现的成功的Git分支模型 。 现在,我们正在开发至less两个版本分支,一个用于最新的稳定版本,另一个用于下一个(“预览”)版本。 我不明白的是,为什么所有的发布版本似乎都被“线性化”了,并且在那里被标记。 为什么不在发布分支中标记版本? 为什么主人呢? 或者为什么一个开发分支,而不是使用它的主人

在git-flow模型中,你的“最新发布”版本实际上映射到master ,而你的“预览版本”映射到一个git-flow release分支。 它是从develop ,最终在实际发布时融合成master 。 然后这将成为你的“最新版本”,你通常会修复该版本的错误,使用git-flow hotfix分支。 这样,你的master总是代表你最新发布版本中最稳定的状态。

如果您想修复旧版本的bug或者在那里进行其他的开发,那么您将从master的相应提交中分支一个support分支(您将拥有在此创build的所有版本)。 support分支机构仍然是实验性的( 根据文档 ),并没有很好的logging。 但是从命令行帮助中可以看到:

 usage: git flow support [list] [-v] git flow support start [-F] <version> <base> 

这些分支刚刚开始,不打算合并回masterdevelop 。 这通常是很好的,因为修复“古老”版本或客户要求在“古代”版本中实施的function不能或不应该回到master 。 如果您仍然认为,您希望将修补程序移植到您的主开发线(由masterdevelop表示),则只需启动hotfix ,挑选您的更改并完成hotfix

看起来主要是一个心理模型,有点过分强调分支。 我同意,你可以标记你提交的提交,而不是合并到主。

不过,这幅画很漂亮。 将所有内容合并回主版本,可以清楚地显示时间顺序的版本,而不是将版本标签散布在整个图表上。

不过,我认为这种模式在老版本中并不适用于修补程序。 它整齐排列整齐。

  1. 假设我们已经发布了版本1.0.1,后来增加了function并发布了1.1.0。
  2. 我们在1.0.1中发现了一个bug,并且想要在两个版本中修复它
  3. 我们必须在1.1.0之后的版本中添加1.0.2,然后直接继续(或之前)1.1.1。

回答你的问题:我认为这是一些规则,在某些情况下,使一个简单的心理模型。 并不是所有的规则都从纯技术的angular度来看是有意义的,但是这并不会使它们变坏。 心理模型对于人类来说是有益的。

我个人认为所提到的gitstream是过于复杂的。

如果您正在使用GitHub,请尝试GitHub flow (如Scott Chacon所述)。

这对于多个function协作,代码审查尤其有用,您可以使用Commit Status API将其与持续集成解决scheme结合使用。

更新 : GitHub Flow™有一个新的官方网站

更新2 :有一个新的官方(和简化)的GitHubstream™GitHub指南: https : //guides.github.com/introduction/flow/

主分支应始终代表您的生产代码库,因此您始终在生产发布后将代码合并回主。

标记用于“记住”进入产品发布的确切代码,以便稍后返回并分析代码是否出错。

从理论上讲,如果在合并到主数据库之后,在发布分支或主分支上添加代码,则无关紧要。 我个人更喜欢在发布分支上标记代码,因为这正是进入构build/发行版的代码(假设合并时可能出错)。

开发分支概念的问题是它是单线程的。 Brendan在这个线程中提到了一个可以使用涉及开发分支概念的策略。

在我的情况下,我有两个版本的基本相同的软件,但每个版本都有一些不同的function。

所以我创build了两个工作worktree ,就是在主人旁边创build两个相关的长时间运行的分支。

 $git worktree add -b version-silver ..\version-silver master $git worktree add -b version-gold ..\version-gold master 

然后我有:

 $git branch master # base stuff here version-silver # some normal features version-gold # some better features 

有一个存储库,但我有3个单独的文件夹在每个分支上面的每个分支。 并在主人做出共同的变化。 然后将其与其他两个版本合并。

 cd master vim basic.cpp git add . git commit -m "my common edit on basic.cpp" cd ..\version-silver vim silver.cpp git add . git commit -m "my specific edit on silver.cpp" git merge master # here i get the basic.cpp latest changes for silver project cd ..\version-gold git merge master # here i get the basic.cpp latest changes for gold project 

每个版本的具体变化也会在相应的文件夹中进行,每个项目的作品都是孤立的,IDE不会混淆。

希望有所帮助。