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>
这些分支刚刚开始,不打算合并回master
或develop
。 这通常是很好的,因为修复“古老”版本或客户要求在“古代”版本中实施的function不能或不应该回到master
。 如果您仍然认为,您希望将修补程序移植到您的主开发线(由master
和develop
表示),则只需启动hotfix
,挑选您的更改并完成hotfix
。
看起来主要是一个心理模型,有点过分强调分支。 我同意,你可以标记你提交的提交,而不是合并到主。
不过,这幅画很漂亮。 将所有内容合并回主版本,可以清楚地显示时间顺序的版本,而不是将版本标签散布在整个图表上。
不过,我认为这种模式在老版本中并不适用于修补程序。 它整齐排列整齐。
- 假设我们已经发布了版本1.0.1,后来增加了function并发布了1.1.0。
- 我们在1.0.1中发现了一个bug,并且想要在两个版本中修复它
- 我们必须在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不会混淆。
希望有所帮助。