针对生产环境发布新版本后有bug需要紧急修复的情况,协作流程思路:新建对应的hotfix补丁分支,相关开发人员基于hotfix分支进行bug修复,修复完毕验证无误后,同样通过Merge Request合并至主仓库,然后由hotfix分支构建重新发布至生产。
其中Master成员负责tag和branch的创建,全体相关开发人员基于分支进行开发。详细流程如下(以JIRA Sprint 31为例,该迭代结束后需要发布版本R-XYPJ-S-CAMS-0.11.0)
一. Master成员:
1. 迭代结束后生产上线,上线后打tag,tag名:R-XYPJ-S-CAMS-0.11.0,tag名与JIRA中发布版本保持一致,随后每次发布变更小版本号。
2. 如果生产发现问题需要修复,建立分支B-R-XYPJ-S-CAMS-0.11.0,branch名以“B-”开头,后面加上JIRA发布版本,同时在GitLab上将分支设为受保护。例如B-R-XYPJ-S-CAMS-0.11.0,该分支永久存在。
3. 当相关人员代码开发修复后,处理Merge Request,基于主仓库的B-R-XYPJ-S-CAMS-0.11.0分支再次构建发布新版本,每次发布生产后,再次打tag,同时tag中小版本号递增,例如修复若干bug重新发布后,新的tag名为:R-XYPJ-S-CAMS-0.11.1,再修复若干bug重新发布后,新的tag名为R-XYPJ-S-CAMS-0.11.2,以此递增。
二. 相关开发人员:
1. 明确当前生产环境问题基于哪个branch进行修复, 可询问Master成员。例如, 当前bug修复分支为:B-R-XYPJ-S-CAMS-0.11.0。
2. 本地运行 git fetch upstream 更新远端repo的信息。
3. 本地运行 git branch -a, 查看所有分支。输出结果中应该可以看到远端分支:remotes/upstream/B-R-XYPJ-S-CAMS-0.11.0
4. 本地运行git checkout B-R-XYPJ-S-CAMS-0.11.0,切换至hotfix分支
5. 在 B-R-XYPJ-S-CAMS-0.11.0分支上修改,提交。
6. 本地运行git push origin B-R-XYPJ-S-CAMS-0.11.0,将更改提交至个人仓库origin。
7. 在Gitlab上发起Merge Request, 从 origin/B-R-XYPJ-S-CAMS-0.11.0 -> upstream/ B-R-XYPJ-S-CAMS-0.11.0
8. 注意必要情况下使用cherry-pick,例如B-R-XYPJ-S-CAMS-0.11.0上修复的内容同时需要合并到master,则:git checkout master,切换到master分支,然后执行 git cherry-pick [commit-id],合并无误后,push到origin master并提MR到upstream master。反之,如果要同步master上一个commit到B-R-XYPJ-S-CAMS-0.11.0,同样方法进行操作。
三. 相关命令参考
1. 分支操作
代码语言:javascript复制## 查看分支
git branch -a
## 新建分支
git checkout -b B-R-XYPJ-S-CAMS-0.11.0
## 从某个commit新建分支,后面跟commit id
git checkout -b B-R-XYPJ-S-CAMS-0.11.0 8c8ecc322753c36ff49d01b490a882485a1c3e59
## 从tag创建分支 git branch <new-branch-name> <tag-name>
git branch B-R-XYPJ-S-CAMS-0.11.0 R-XYPJ-S-CAMS-0.11.0
## 删除本地分支(参数可以是-d或者-D,-d是处于别的分支时删除,-D是强制删除)
git branch -d B-R-XYPJ-S-CAMS-0.11.0
## 删除远程分支
git push origin --delete B-R-XYPJ-S-CAMS-0.11.0
git push upstream --delete B-R-XYPJ-S-CAMS-0.11.0
## 推分支到远程
git push origin B-R-XYPJ-S-CAMS-0.11.0
git push upstream B-R-XYPJ-S-CAMS-0.11.0
2. tag操作
代码语言:javascript复制## 查看tag
git tag -l
## 新建tag,
git tag -a R-XYPJ-S-CAMS-0.11.0 -m "Sprint 31发布版本0.11.0"
## 如果要从某个commit打tag
git tag -a R-XYPJ-S-CAMS-0.11.0 8c8ecc322753c36ff49d01b490a882485a1c3e59 -m "Sprint 31发布版本0.11.0"
## 删除tag
git tag -d R-XYPJ-S-CAMS-0.11.0
## 删除远程tag
git push origin --delete tag R-XYPJ-S-CAMS-0.11.0
git push upstream --delete tag R-XYPJ-S-CAMS-0.11.0
## 获取远程tag
git fetch upstream tag R-XYPJ-S-CAMS-0.11.2
## 推tag
git push origin R-XYPJ-S-CAMS-0.11.0
git push upstream R-XYPJ-S-CAMS-0.11.0
## 推所有tag
git push origin --tags
3. cherry-pick
代码语言:javascript复制## 单个commit, git cherry-pick加commit id
git cherry-pick d01b490
## 多个commit,git cherry-pick commitid1..commitid100,中间两个点
## 注意,不包含第一个commitid , 即 git cherry-pick (commitid1..commitid100]
git cherry-pick d01b490..a1c3e59