关于代码管理:在阿里我们如何管理代码分支-分支
引言在阿里外部,风行着许多有意思的工程实际。有些实际通过工具和流程嵌在团体的大环境里,外界不容易复制,有些实际则是表露在大家的日常习惯里,被默默的恪守。比方分支治理这件事,其实属于工具和习惯各占一半,并且颇有阿里特色的成分,适宜作为一个例子。阿里有很多的研发团队,不同事业部应用的公布流程、分支策略并非整齐划一,但总体上看是比拟规整的。其中有一种支流的公布模式以及对应的分支应用形式,称为“AoneFlow”。这套工作模式思路独特,在阿里以外的中央并不多见。本文围绕这些实际,聊一聊分支治理的话题。 作者:林帆(花名金戟),阿里巴巴研发效力事业部技术专家。 细数分支模式说到分支管理模式,咱们最耳熟能详的莫过于 TrunkBased 和 GitFlow。 TrunkBased 模式是继续集成思维所崇尚的工作形式,它由单个骨干分支和许多公布分支组成,每个公布分支在特定版本的提交点上从骨干创立进去,用来进行上线部署和 Hotfix。在 TrunkBased 模式中,没有显性的个性分支。当然实际上 Git 的分布式特色天生容许每个人有本地分支,TrunkBased 也并非排挤短期的个性分支存在,只不过在说这种模式的时候,大家通常都不会明确强调它罢了。 尽管近年来有许多不错的案例,但 TrunkBased 模式并没有一统天下。它的毛病比拟显著,太多的团队同时工作在骨干上,到公布的时候就可能呈现劫难(尤其是多版本并行开发的状况)。补救的措施是 FeatureToggle 以及频繁的集成和足够的测试笼罩,这对开发团队的能力提出了比拟高的要求。目前 TrunkBased 模式次要用在不须要同时保护多个历史版本的 SaaS 型我的项目,特地是通过微服务革新的各种小型服务上。 TrunkBased 模式有两种常见演进版本。OneFlow 模式参考了 TrunkBased 的许多思维,对操作流程做了更严格的定义,减少了 Hotfix 分支等内容。多骨干模式(通常是双骨干,固定的开发分支和固定的公布分支),算是 TrunkBased 采纳固定公布分支的特例,在晋升团队的微服务落地能力这篇文章里介绍过,不再赘述。 GitFlow 模式是若干模式的集大成者,蕴含一个骨干分支、一个开发分支、许多的个性分支、许多的公布分支和 Hotfix 分支,以及许多繁琐的合并规定。它有一个 Git 插件,不过早就没人保护了。因为对每个阶段的每项操作定义十分明确,它已经是很多器重流程的企业眼里的香馍馍。但它应用起来并不是很容易,大量的合并抵触和对集成测试不敌对也是它被诟病最多的中央。 对,还有 GithubFlow 模式,不过这种策略无非是在 TrunkBased 的根底上,减少了集体仓库和 Pull Request 合并代码的操作,与在同一个仓库里减少集体分支的做法相似,从实用的意义来说,它更适合分布式团队。GithubFlow 也有演进版本,例如强调了多环境部署和将仓库或分支与环境关联的 GitlabFlow 模式。 要么简略粗犷如 TrunkBased,要么繁琐简单如 GitFlow。难到真没有其余抉择了吗? 另辟蹊径的 AoneFlow在 AoneFlow 上你能看到许多其余分支模式的影子。它基本上兼顾了 TrunkBased 的“易于继续集成”和 GitFlow 的“易于治理需要”特点,同时躲避掉 GitFlow 的那些繁文缛节。 看一下具体套路。AoneFlow 只应用三种分支类型:骨干分支、个性分支、公布分支,以及三条根本规定。 规定一,开始工作前,从骨干创立个性分支。 AoneFlow 的个性分支根本借鉴 GitFlow,没有什么特别之处。每当开始一件新的工作项(比方新的性能或是待解决的问题)的时候,从代表最新已公布版本的骨干上创立一个通常以feature/前缀命名的个性分支,而后在这个分支上提交代码批改。也就是说,每个工作项(能够是一个人实现,或是多集体合作实现)对应一个个性分支,所有的批改都不容许间接提交到骨干。 ...