github分支规范
转自:https://www.cnblogs.com/xuld
一、目的
我们制定分支规范,意在实现以下目标:
- 减少沟通成本:开发者可以很清晰地知道需要修改的代码位于哪个分支。
- 减少 bug 隐患:避免因分支合并导致 bug。
- 维护线上稳定:通过一定的流程规范,保证线上代码安全。
- 灵活:支持多版本同时开发、同时发布。
- 简洁:用最少的分支解决问题,避免反复创建、合并分支,节约操作时间。
二、主分支: master
主分支(master)用于存放最新的稳定版本。
正式发布时:在主分支上创建标签(tag)。如果发布非常频繁可以不加。
标签的命名规范为:release-v版本号-日期(如 release-v0.0.1-20161010)。业务项目可以不加版本号;框架、工具项目可以不加日期。
release-xx 分支:如果需要同时维护多个发布版本(比如有些框架在发布新版同时还会更新老版),则需要基于 master 分支创建名为 release-v版本号前缀(如 release-v1.x)的分支,之后 master 分支持续更新为最新稳定版,release-xx 分支则持续更新为对应版本的最新稳定版。所有 release-xx 分支和 master 分支地位相同,master 相当于是 release-latest 分支。
三、开发分支: dev-xx
dev 分支用于存放最新代码(可能包含未测试的代码),只有需要正式发布时才会合并到 master 分支。
如果项目对稳定性要求不高(比如小项目、练习用的代码),则可以不建 dev-xx 分支,而直接在 master 分支修改。
开发时:基于 master 分支创建名为 dev-v版本号(如 dev-v0.0.1)的分支。业务项目可以不加版本号,固定为 dev 分支。
开发完成后发布测试:直接发布 dev 分支到测试环境。如果测试出现 bug 则在 dev 分支继续修复。
测试完成后正式发布:将 dev 分支合并到 master 分支。然后发布 master 分支。
如果需要同时开发多个版本,可以从 master 创建多个不同版本号的 dev-xx 分支。每次发布后其它 dev-xx 分支需要从 master 分支合并最新的改动。
四、修复分支: bugfix-xx
发布后线上发现 bug 时:
- bug 影响不大:建议在 dev-xx 分支中修复,等待下次发布时修复。
- bug 影响很大:将线上代码回滚到 master 分支的上一个标签(或最近的 release-xx 分支)。
- bug 影响一般:从 master 分支创建名为 bugfix-时间(如 bugfix-20161010190000) 的分支,在此分支修复 bug,修复完成后直接将 bugfix-xx 分支发布上线。如果上线后 BUG 已解决则将 bugfix-xx 分支合并到 master 分支并删除 bugfix-xx 分支。如果 bug 仍未解决,则继续在此分支修复 bug 直到解决。
五、构建分支: build-xx
有些项目需要预编译(压缩、优化)代码才能发布上线,所有分支在发布时都会先合并到同名的 build-xx 分支。
如 dev-0.0.1 在发布测试环境时,需要先合并到 build-dev-0.0.1 分支,然后经过预编译后发布 build-dev-0.0.1 分支。
如 dev-0.0.1 在发布正式环境时,需要先合并到 master 分支,然后合并到 build-master 分支,然后经过预编译后发布 build-master 分支。
build-xx 分支可以使用构建工具自动维护。大部分情况开发者不需要关心此分支,除非发现因自动构建导致的 bug 时,开发者可以切到此分支查找问题。
六、其它分支
根据项目实际需求,可以创建其它分支,如 github 页面需要的 gh_pages 等分支。
七、总结
分支总共有:master、dev-xx、release-xx、bugfix-xx、build-xx 五类。大部分项目只需创建前面 2 个分支,其余的根据需要再建。开发者平时只需维护 dev-xx 分支。dev-xx 的代码只能发布到测试环境,不能直接发布上线。
github分支规范的更多相关文章
- 产品管理开发之Git工作流和分支规范推荐
前言 无论是开源项目还是内部项目,使用Git都是大势所趋,尤其是在产品管理这块,使用Git大大提高了开发效率和产品的交付频率.本篇,针对Git的工作流和分支使用,进行了一些推荐. 目录 1 产 ...
- github 分支管理
github 分支管理 最近有同事问我git 如何管理分支,这里我以github为例,做下工作中常用的分支管理操作. 分支管理 作用:假设你准备开发一个新功能,但需要两周才能完成,第一周写了60%,如 ...
- Git 基本分支规范
基本代码分支应该分为两类,一类是主要分支,包括线上主分支 Master 和开发主分支Develop:另一类是辅助分支,包括测试分支 Release,线上紧急修复分支 Hotfix,以及功能开发分支 F ...
- github 分支操作
1.查看分支 1.查看本地分支 使用git branch命令,如下: $ git branch * master *标识的是你当前所在的分支. 2.查看远程分支 命令如下: git branch -r ...
- GitHub分支项目不支持搜索问题解决:Sorry, forked repositories are not currently searchable.
错误如下: 在GitHub上的项目,如果是分支项目的星星数没有超过父项目,就不会去索引从而不会进行代码搜索. 解决方法: 1.要在搜索结果中包含分支,需要添加fork:true或fork:only查询 ...
- github 分支 合并
Git如何进行分支管理? 1.创建分支 创建分支很简单:git branch <分支名> 2.切换分支 git checkout <分支名&g ...
- github分支管理
一. 需要创建的分支 1.master 主分支 2.dev 开发分支 3.bug 修改bug分支 4.release 预发布分支 二.分支使用 1.在master上创建dev,bug,release分 ...
- Git分支规范说明
1.分支类型说明 分支名称 分支描述 唯一 权限管理 release 发布分支,内部分支,当确定需要发布版本时,从develop分支拉出此分支 唯一 最高权限,由版本经理或者团队核心成员组管理 mas ...
- 在github分支上上传空文件夹
GIT工具是依靠文件来识别文件夹的,对于空的文件夹是不能识别的.因此如果需要在代码中增加一个空文件夹,同时需要在文件夹中增加一个空文件.gitkeep 当批量增加空文件夹时,可以在GIT库的根目录下输 ...
随机推荐
- 【安全测试自学】初探web安全处测试(二)
自学资料: 安全测试专家成长系列之-初探Web安全2.mp4 XSS攻击 案例7:IPhone5 XSS盲打酷狗+后台SQL注射 CSRF即跨站请求伪造攻击: 举例: 上传漏洞: 危害: 文件包含漏洞 ...
- Docker最简教程
本文旨在让你用最短的时间弄懂Docker命令操作,什么虚拟化都太泛泛了,不讲大道理,实践出真知,让你从此的日常开发和工作中在面对Docker时不再茫然失措而是得心应手.本文也不谈安装,我实在认为作为程 ...
- sbt 学习
一.基础 1.工程根目录 包含build.sbt的目录是工程的根目录.注意,就算在一个空目录下面执行sbt about,也会生成project文件夹 2.源文件目录结构 SBT有固定的文件组织结构 s ...
- QAC静态测试配置及使用教程
使用前提:安装成功QAC软件. . 1.打开软件如上 . 2.file->Auto-Create-Project,出现如下所示对话框 1-工程名字 2-将要分析的代码路径 3-代码报告输出路径 ...
- 9Linux_LVM_iptables
LVM 创建物理卷 卷组 逻辑卷 格式化 挂载 扩容 缩小 快照 删除逻辑卷
- [HTML]将错误alert出来[转]
<script type="text/javascript"> /** * @param {String} errorMessage 错误信息 * @param {St ...
- JeecgBoot版本4月份新版即将发布,抢先体验。。
JeecgBoot版本4月份新版即将发布,抢先体验.. 即将发布版本-更新日志: 1.代码生成器GUI工具 2.支持一对多代码生成器 3.支持按钮权限 4.支持数据权限 ...
- Django08-批量创建数据
通过views.py文件中创建 第1种方法循环创建数据, 这种方法不推荐,因为每一次循环都会连接一次数据库,效率较慢 def user_list(request): user_all = models ...
- C#调用C++的dll EntryPointNotFoundException
问题描述:不带参数的函数可以通过C#调用,含有参数的函数报错: EntryPointNotFoundException:此外,采用depends可以查看到所有导出函数. 此问题解决方案:步骤1:在C+ ...
- java swing button和键盘监听冲突问题
原因: 点击button会让jframe失去焦点,然后键盘监听不起作用 解决: 让jframe重新获取焦点就行了 jf.setFocusable(true); // JFrame jf = new J ...