Git 分支管理规范

img
Git 仓库申请流程
  1. 开发主管向 Git 管理员提交 Git 仓库申请【邮件:发送给 Git 管理员,抄送给项目经理,申请表可向 Git 管理员获取】
  2. Git 管理员审批开发主管的申请,审批以下具体信息:
    1. 审批邮件是否抄送给项目经理
    2. 申请的 Git 仓库名称是否符合命名规范
  3. 若审批通过,则 Git 管理员完成以下任务:
    1. 创建 Git 仓库
    2. 设置开发主管为 Git 仓库的 Master 角色(管理员,具有该 Git 仓库的管理权限)
    3. 将 Git 仓库地址告知开发主管【邮件:发送给开发主管,抄送给项目经理】
  4. 若审批不通过,则驳回申请【邮件:发送给开发主管,抄送给项目经理】

初始化 Git 仓库

第一步:克隆远程仓库

开发主管从 Gitlab 中克隆远程仓库

命令示例:

git clone <仓库地址> 

第二步:提交并推送初始版本

开发主管提交代码初始版本到 master 分支,并推送至 Gitlab 系统

image-20190919092114058

开发主管在 Gitlab 系统中设置 master 分支为 Protectd 分支(保护分支)Protected 分支不允许 Developer 推送代码,但 Master 可以推送代码

命令示例:

# 提交本地修改:
git add .
git commit –m “提交日志”
# 推送 master 分支:
git push origin master

第三步:创建开发分支

开发主管在 master 分支上创建 develop 分支(开发分支),并推送至 Gitlab 系统 master

image-20190919092305100

master 分支与 develop 分支一样,有且仅有一个

命令示例:

# 从 master 分支上创建 develop 分支: 
git checkout –b develop master
# 推送 develop 分支:
git push origin develop

开发新功能

开发人员在 develop 分支上实现新功能,包括:新特性与 Bug 修复

image-20190919092443274

命令示例:

# 切换到 develop 分支: 
git checkout develop
# 提交本地修改:
git add .
git commit –m “提交日志”
# 推送 develop 分支:
git push origin develop

若存在多个新特性可以并行开发,则开发主管可创建一个或多个 feature 分支(特性分支),命名规范:feature-分支创建日期-新特性关键字,例如:feature-20190919-i18n

image-20190919092649635

当新特性开发完毕后,开发主管需将 feature 分支合并到 develop 分支,最后需删除 feature 分支

命令示例:

# 从 develop 分支上创建 feature 分支:
git checkout –b feature-20190919-i18n develop
# 合并 feature 分支到 develop 分支: git checkout develop
git merge --no-ff feature
# 删除本地 feature 分支:
git branch –d feature-20190919-i18n
# 删除远程 feature 分支:
git push origin :feature-20190919-i18n
什么时候需考虑使用 feature 分支?
  1. 开发一个独立的新特性(完成时,需合并到 develop 分支)
  2. 技术研究与尝试(若失败,可随时删除 feature 分支)
  3. 提前实现下一个版本需要开发的特性(可不在本次迭代中发布)

推荐使用 feature 分支,但 feature 分支的生命周期不能跨一次迭代

准备发布新版本

开发主管需完成以下任务:

  1. 确认 develop 分支上的功能是否开发完毕

  2. 若开发完毕,则创建 release 分支(发布分支),命名规则:release-分支创建日期-待发布版本号,例

    如:release-20190919-v1.0.0

  3. 首先在 release 分支中升级 Maven 版本号,例如:1.0.0-SNAPSHOT,然后修改 version.ini 文件(便于在

    部署时查看当前版本号),最后在 release 分支上做一次提交

  4. 通知测试主管可对 release 分支进行测试【邮件:发送给测试经理,抄送给项目经理与团队成员】

image-20190919092952002

命令示例:

# 从 develop 分支上创建 release 分支:
git checkout –b release-20190919-v1.0.0 develop

修复待发布版本中的 Bug

开发人员在 release 分支上修复测试人员提交给自己的 Bug

image-20190919093036529

只允许在 release 分支上修复 Bug,不允许提交任何新特性,开发主管需全程监管

命令示例:

# 切换到 release 分支:
git checkout release-20190919-v1.0.0
# 提交本地修改:
git add .
git commit –m “提交日志”
# 推送 release 分支:
git push origin release-20190919-v1.0.0

发布新版本

第一步:集成测试

测试主管需完成以下任务:

  1. 从 release 分支上检出所有代码并搭建集成测试环境
  2. 安排测试人员,对 release 分支进行集成测试
  3. 通知开发主管当前版本已集成测试完毕【邮件:发送给开发主管,抄送给项目经理】

第二步:冒烟测试

开发主管需完成以下任务:

  1. 将 release 分支同时合并到 master 分支与 develop 分支
  2. 邮件通知测试主管,对 master 分支进行冒烟测试

第三步:发布新版本

开发主管需完成以下任务:

  1. 修改 master 分支上的 Maven 快照版为发布版(去掉 SNAPSHOT 后缀)
  2. 添加发布日志(RELEASE.md)
  3. 在 master 分支上创建标签,命名规则:tag-日期-版本,例如:tag-20190919-v1.0.0
  4. 删除 release 分支
  5. 打包并上传 Maven 私服
  6. 通知测试主管新版本已发布完毕【邮件:发送给测试主管,抄送给项目经理与 Git 管理员,邮件格式
    请找 Git 管理员获取】
image-20190919094238429

命令示例:

# 合并 release 分支到 master 分支:
git checkout master
git merge --no-ff release-20190919-v1.0.0
# 合并 release 分支到 develop 分支:
git checkout develop
git merge --no-ff release-20190919-v1.0.0
# 在 master 分支上创建标签:
git tag tag-20190919-v1.0.0
# 删除本地 release 分支:
git branch –d release-20190919-v1.0.0
# 删除远程 release 分支:
git push origin :release-20190919-v1.0.0

修复线上 Bug

第一步:创建 hotfix 分支 开发主管需完成以下任务:
  1. 从 master 分支某个 tag 上创建一个 hotfix 分支(热修复分支),命名规则:hotfix-分支创建日期-待
    发布版本号,例如:hotfix-20190919-v1.0.1
  2. 首先在 hotfix 分支中升级 Maven 版本号(例如:1.0.1-SNAPSHOT),然后修改 version.ini 文件,最后在
    hotfix 分支上做一次提交
  3. 指导开发人员完成 Bug 修复
  4. 通知测试主管对 hotfix 分支进行测试【邮件:发送给测试主管,抄送给项目经理】
image-20190919094344492

命令示例:

# 从某个标签上创建 hotfix 分支:
git branch hotfix-20190919-v1.0.1 tag-20190919-v1.0.0
第二步:验证 Bug 是否已修复测试主管需完成以下任务:
  1. 验证 Bug 是否已修复
  2. 通知开发主管 Bug 已修复【邮件:发送给开发主管,抄送给项目经理】
第三步:创建标签并发布新版本

开发主管需完成以下任务:

  1. 将 hotfix 分支同时合并到 master 与 develop 分支
  2. 通过测试主管进行冒烟测试
第四步:发布新版本

开发主管需完成以下任务:

  1. 修改 master 分支上的 Maven 快照版为发布版(去掉 SNAPSHOT 后缀)
  2. 添加发布日志(RELEASE.md)
  3. 在 master 分支上创建标签
  4. 删除 hotfix 分支
  5. 打包并上传 Maven 私服
  6. 通知测试主管新版本已发布完毕【邮件:发送给测试主管,抄送给项目经理与 Git 管理员,邮件格式

请找 Git 管理员获取】

image-20190919094509499

命令示例:

# 合并 hotfix 分支到 master 分支:
git checkout master
git merge --no-ff hotfix-20190919-v1.0.1
# 合并 hotfix 分支到 develop 分支:
git checkout develop
git merge --no-ff hotfix-20190919-v1.0.1
# 在 master 分支上创建标签:
git checkout master
git tag tag-20190919-v1.0.1
# 删除本地 hotfix 分支:
git branch –d hotfix-20190919-v1.0.1
# 删除远程 hotfix 分支:
git push origin :hotfix-20190919-v1.0.1
若无法将 hotfix 分支合并到 master 与 develop 分支时,应该如何发布?

比如:现在 master 分支已经发布了 2.0.0 版本(代码结构发生了很大的变化),但线上发现了一个 1.0.0 版 本的 Bug,当修改了 Bug后,是无法再合并到 master 与 develop 分支的,开发主管需完成以下任务:

  1. 直接在 hotfix 分支上创建标签
  2. 删除 hotfix 分支(分支删除了,只要标签还在,版本就可以找得回来)
  3. 手工修改 develop 分支中的代码(在后续发布时再合并到 master 分支中)

定制化项目

当需要对某项目进行定制化时,可从源项目的 Git 仓库 fork 出一个新的 Git 仓库:

image-20190925212426543

当 fork 后,对 repo1 做出的任何修改,都不会影响到 repo2
在 repo2 中修复了 Bug,可通过 Merge Request 的方式提交给 repo1
在 repo2 中可随时拉取 repo1 中的提交,但 repo1 不能拉取 repo2 中的提交

附录

Maven 版本号命名规范

格式:Major.Minor.Micro

版本 说明
Major 版本 架构调整
Minor 版本 新特性
Micro 版本 Bug 修复、优化

Git 分支类型

分支 用途
master 分支(主分支) 稳定版本
develop 分支(开发分支) 最新版本
release 分支(发布分支) 发布新版本
hotfix 分支(热修复分支) 修复线上 Bug
feature 分支(特性分支) 实现新特性
image-20190919095107028

Gitlab 角色与项目角色对应关系

Gitlab 角色 项目角色
Owner(拥有者) Git 管理员
Master(管理员) 开发主管
Developer(开发者) 开发人员
Reporter(报告者) 测试人员
Guest(观察者) 其他人员

Git 管理员与开发主管的职责

Git 管理员 开发主管
创建 Git 仓库 管理项目分支
检查 Git 分支规范 成员管理
维护 Gitlab 系统 管理标签

来源:Git分支管理规范

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 作者:福天(微信公众号:mttyply) 张敏强最终没能挺住残酷的现实,在上海晃悠了3天,就落魄的回家了,身上仍无...
    福天思想阅读 452评论 0 0
  • 下了班,他想体验一下用猛犸充电程序给电车充电,他没有实体卡,而电子卡也是需要实体卡设定的。糟糕的是如果直接扫二维码...
    文森林木阅读 639评论 0 0
  • 每次面试官必问的一个问题是:“你的特长或者爱好是什么?”其实我每次心里都坚定的回答――写作!有几次真的脸皮厚的...
    图_图阅读 146评论 0 0
  • 1.MECE法则:把整体分解成要素,在这个过程中不重叠、不遗漏。 2.波特五力模型:任何时候都会有各种竞争对手,潜...
    小笨鱼王月阅读 140评论 0 0
  • 大家好,我是许昌市实验小学二(九)班的盛梦洋,我是一个活泼开朗,天真可爱,热爱生活的小朋友。我喜欢读书、跳舞和...
    盛盛盛姑娘阅读 674评论 0 1