git常用命令与分支管理策略(trunkBased-gitFlow-aoneFlow)
1、命令大全
2、附加的命令说明
命令 | 说明 |
---|---|
git checkout . && git clean -xdf | 回归合并代码的请求 |
git branch -D branchName | 强制删除本地的代码分支 |
git checkout -b 本地分支名 远程分支名 | 检出代码到本地 |
git remote update origin -p | 强制更新远程仓库 |
3、主流分支管控模式
- TrunkBased
- GitFlow
- AoneFlow
3.1、TrunkBased
TrunkBased 模式 是持续集成思想所崇尚的工作方式,它由单个主干分支和许多发布分支组成,每个发布分支在特定版本的提交点上从主干创建出来,用来进行上线部署和 Hotfix。
在 TrunkBased 模式中,没有显性的特性分支。当然实际上 Git 的分布式特征天生允许每个人有本地分支,TrunkBased 也并非排斥短期的特性分支存在,只不过在说这种模式的时候,大家通常都不会明确强调罢了。
优点:使团队更加灵活。可以随时发布主分支,合并冲突少。
缺点:太多的团队同时工作在主干上,到发布的时候就可能出现灾难(尤其是多版本并行开发的情况)。
弥补措施: FeatureToggle 以及频繁的集成和足够的测试覆盖,这对开发团队的能力提出了比较高的要求。
适用项目:TrunkBased 模式适用在不需要同时维护多个历史版本的 SAAS 型项目,经过微服务改造的各种小型服务上。
3.2、GitFlow
GitFlow 模式 是若干模式的集大成者,包含一个主干分支、一个开发分支、许多的特性分支、许多的发布分支和 Hotfix 分支,以及许多繁琐的合并规则。
优点:每个阶段的每项操作定义十分明确,重视流程。
缺点:大量的合并冲突;功能分离对集成测试不友好,不可预测的发布(如果功能分支尚未合并,则不可能知道需要多少时间才能发布。你不知道它是因为你不知道哪个合并会发生冲突,你也不知道新功能将如何相互影响)。
3.3、 AoneFlow
AoneFlow 模式 是阿里巴巴的分支管理模式。
在AoneFlow 上能看到许多其他分支模式的影子。它基本上兼顾了 TrunkBased 的“易于持续集成”和 GitFlow 的“易于管理需求”特点,同时规避掉 GitFlow 的那些繁文缛节。
AoneFlow 的三种分支类型:主干分支、特性分支、发布分支,以及三条基本规则。
规则一,开始工作前,从主干创建特性分支。
规则二,通过合并特性分支,形成发布分支。
规则三,发布到线上正式环境后,合并相应的发布分支到主干,在主干添加标签,同时删除该发布分支关联的特性分支。
3.4、 写在最后
代码分支模式的选择并没有绝对的正确和错误之分,关键是与项目的规模和发布节奏相匹配。最合适的,才是最好的!
参考文章:
GitFlow有害论:http://insights.thoughtworkers.org/gitflow-consider-harmful
在阿里,我们怎么管控分支?:https://yq.aliyun.com/articles/573549
我们为什么从GitFlow切换到Trunkbased:https://blog.csdn.net/wangqingjiewa/article/details/78519686
Feature Flag功能发布控制:http://fex.baidu.com/blog/2014/07/feature-flag