• Git工作流


    1. 主要分支介绍

    1.1 master分支

    主分支,产品的功能全部实现后,最终在master分支对外发布。

    1.2 develop分支

    开发分支,基于master分支克隆,产品的编码工作在此分支进行。

    1.3 release分支

    测试分支,基于delevop分支克隆,产品编码工作完成后,发布到本分支测试,测试过程中发现的小bug直接在本分支进行修复,修复完成后合并到develop分支。本分支属于临时分支,目的实现后可删除分支。

    1.4 bugfix分支

    Bug修复分支,基于master分支或发布的里程碑Tag克隆,主要用于修复对外发布的分支,收到客户的Bug反馈后,在此分支进行修复,修复完毕后分别合并到develop分支和master分支。本分支属于临时分支,目的实现后可删除分支。

    1.5 feature分支

    功能特征分支,基于develop分支克隆,主要用于多人协助开发场景或探索性功能验证场景,功能开发完毕后合并到develop分支。feature分支可创建多个,属于临时分支,目的实现后可删除分支。

    2. 新功能开发工作流

    2.1 切换到本地仓库工作区

    cd /home/timerhunter/workspace

    2.2 从远程仓库克隆代码到本地仓库

    git clone https://xxxx@localhost:8443/r/valve/V5-Lora.git

    2.3 基于master分支,创建develop分支

    /* 切换到master分支 */
    git checkout master
    /* 基于master分支克隆develop分支,并在克隆完毕后直接跳转到develop分支 */
    git checkout -b develop
    /* 推送develop分支到远程仓库 */
    git push origin develop

    注:编码工作主要在develop分支,master分支主要用来发布稳定版本

    2.4 在本地仓库的开发流程

    完成一个功能点或者一天的工作结束时,将代码提交到本地仓库

    /* 提交修改到缓冲区 */
    git add .
    /* 提交修改到本地仓库 */
    /* 如果是修复的BUG,应该在修改说明的最开始添加Bug#ID,多个Bug用逗号分隔,例如Bug#002,003 */
    /* 如果是完成了一个指派的任务,应该在修改说明的最开始添加Task#TaskID,例如Task#165 */
    git commit -m "Bug#123 修改说明"
    /* 每完成一个功能点可以对代码进行打包 */
    git tag -m "简要说明增加/修复/删除了什么功能" v0.0.0.170718

    注:不是每一个Tag都需要提交到远程仓库,比如可以在完成一个功能点的编码工作后未编译就打一个包,仅存储于本地仓库,在编译成功&测试通过后,再打一个新的Tag包(里程碑Tag包),仅将里程碑Tag包推送到远程仓库

    2.5 推送代码到远程仓库

    当完成一个功能点或阶段工作时,将代码推送到远程仓库develop分支

    /* 执行代码拉取操作,防止代码冲突 */
    git pull
    /* 解决代码冲突后,推送代码到远程仓库*/
    git push origin develop

    注:禁止将未编译或编译不通过的代码提交到远程仓库,如果编码工作进行未完成可以提交到本地仓库中,等待该功能点全部实现后再将代码推送到远程仓库中。

    2.6 将代码发布到测试分支

    阶段性的开发工作已完成,启动小批量测试工作,将代码发布到测试分支release

    git checkout develop
    git checkout -b release
    git push origin release

    2.7 测试工程师提交Bug后修复

    • 修复流程同#2.4,#2.5;
    • 注意在git commit时的修复说明中添加Bug#BugID关键字
    • 完成一个Bug修复或完成阶段性工作后,将代码推送到远程分支

    2.8 测试工作完成后,合并代码到develop分支

    /* 切换到develop分支 */
    git checkout develop
    /* 执行合并操作,将release分支代码合并到develop分支 */
    git merge release
    /* 如果合并报错,则解决冲突,冲突解决后继续再次执行合并 */

    2.9 开发工作和测试工作都完毕后,将develop分支合并到主线

    git checkout master
    git merge develop

    2.10 阶段开发完毕,打一个里程碑Tag包

    /* 创建里程碑Tag */
    git tag -m "Task#003 v1.0.0 首版发布" v1.0.0.170718
    /* 推送里程碑Tag到远程仓库 */
    git push origin v1.0.0.170718

    3. 发布后的产品Bug修复工作流

    3.1 获取Bug产品的软件发布版本号

    3.2 查找里程碑Tag

     /* 查询里程碑及其提交说明 */
     git tag -n1 -l v*

    3.3 基于里程碑Tag创建分支

     /* git checkout -b [创建的分支名称] [里程碑Tag名称] */
     git checkout -b bugfix-v1.0.0.170718 v1.0.0.170718

    3.4 修复代码后可以查询修改过的地方

     git diff

    3.5 修复完毕后分别合并到develop分支和master分支

    /* 合并到develop */
    git checkout develop
    git merge hotfix-v1.0.0.170718
    /* 提交到远程仓库develop分支 */
    git push origin develop
    /* 合并到master */
    git checkout master
    git merge hotfix-v1.0.0.170718
    /* 提交到远程仓库master分支 */
    git push origin master

    3.6 创建新的里程碑Tag

     git tag -m "Bug#002 修复某某Bug" v1.0.1.170719
     /* 推送到远程仓库 */
     git push origin v1.0.1.170719

    3.7 删除bugfix分支

    /* 删除本地分支-git branch -d [本地分支名]*/
    git branch -d bugfix-v1.0.0.170718
    /* 删除远程分支-git push origin :[远程分支名]*/
    git push origin :bugfix-v1.0.0.170718
  • 相关阅读:
    mysql source 乱码
    php5.6.11 openssl安装
    python threading模块的Lock和RLock区别
    python多线程一些知识点梳理
    多核处理器中进程和线程是如何一起工作的?
    IO是否会一直占用CPU?(转)
    Python TypeError: __init__() got multiple values for argument 'master'(转)
    Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解(转)
    浏览器环境下JavaScript脚本加载与执行探析之代码执行顺序(转)
    为什么有的网页右击没有出现审查元素
  • 原文地址:https://www.cnblogs.com/peteremperor/p/10056913.html
Copyright © 2020-2023  润新知