zoukankan      html  css  js  c++  java
  • 从一个前端项目实践 Git flow 的流程与参考

    Git flow 出自 A successful Git branching model,这里使用了一个前端项目配合本文稿实施了 git flow 并记录流程作出示例和参考,对 hotfix 与持续部署略有提及,本意是用作公司内部的技术安利。
    所用源码及文档本身见于 github jusfr/HelloGitflow

    前言

    Gitflow 是一种 git 分支管理工具——说是思想也不为过,它使用既定策略区分和管理开发、测试、生产环境的代码版本,对测试与持续集成友好,与敏捷、迭代的思路一致。

    1 准备工作

    1.1 创建空白目录

    mkdir HelloGitflow
    cd HelloGitflow
    

    1.2 开始当前目录工作,示例创建和保存一个 index.html

    <!DOCTYPE html>
    
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <div></div>
    </body>
    </html>
    
    git add index.html
    git commit -m "init commit"
    
    

    2 Git flow init

    git flow init
    

    这里使用了默认配置,一路 next

    3 一个完整的开发周期

    3.1 任务拆解,示例添加了分支 about 和 navigation

    git flow feature start about
    git flow feature start navigation
    

    3.1

    任务拆解相当于 story 认领,实际开发中的步骤更加繁冗。

    3.2.1 about 分支创建了一个 about.html

    git checkout feature/about
    # more work to do
    git add about.html
    git commit -m "add about.html"
    

    3.2.1

    3.2.2 navigation 分支创建了一个 nav.html

    git checkout feature/navigation
    # more work to do
    git add nav.html
    git commit -m "add nav.html"
    

    3.2.2

    3.3 开始合并分支

    3.3.1 合并 about

    git flow feature finish about
    

    3.3.1

    3.3.2 合并 navigation,存在 merge 过程

    git flow feature finish navigation
    

    3.3.2

    3.4 版本发布

    3.4.1 当 feature 积累数量达到可以进行版本发布时,开始进行 release 发布

    git flow release start v0.1
    

    3.4.1

    3.4.2 部分内容需要修改,在这里为各页面添加了 title

    git add index.html about.html nav.html
    git commit -m "add title for each page"
    

    3.4.2

    3.4.3 结束当前 release 分支

    # git push 
    git flow release finish v0.1
    

    3.4.3

    4 连续的开发周期

    我们开始在远程分支上工作,可以在结束分支前先将其 push 到远程分支上避免未在本地保留的情况

    git remote add github https://github.com/jusfr/HelloGitflow.git
    git push github --all
    

    4.1

    虽然开出来很多分支,但是可以观察到 master 和合并了两次,且分别被标记为 v0.1 和 v0.2

    4.2

    不考虑测试等情况,标记 v0.1 和 v0.2 的 master 版本或者 release/v0.1 和 release/v0.2 都是可以部署的版本。

    5 线上的 bug 修复

    现在已经在 v0.2 基础上进行 account 和 react 的分支开发,但是发现线上的 v0.2 版本需要立即修复的问题,分支状态

    5.1

    开启 hotfix/v0.2.1 来修复这个问题

     git flow hotfix start v0.2.1
    

    在 hotfix/v0.2.1 的视角来看,它是从最近的 mater 分支checkout 下来的,所以对正在进行的 account 和 react 无影响

    5.2

    以全局视角来看,hotfix/v0.2.1 与 account 和 react 确实没有交集

    5.3

    现在问题修复,合并 hotfix/v0.2.1

    git flow hotfix finish 'v0.2.1'
    

    当然仍然可以先 push 到远程分支,可以看到进行了若干步操作

    1. 合并 hotfix/v0.2.1 到 master 分支,master 分支被打上 v0.2.1 的 tag
    2. 合并 master 到 develop 分支。

    在第2步中,如果 develop 有过变更,比如有过 feature 合并,那么可能存在冲突需要解决

    5.4

    在此示例中, master 分别被打上了 v0.1, v0.2, v0.2.1 标记,这对基于 master 的持续部署非常友好:可以快速在这些版本中部署与回滚,而不用关心存在多少变更与分支等等。

  • 相关阅读:
    sprintf与snprintf
    风雨20年:我所积累的20条编程经验
    istream_iterator, ostream_iterator,copy以及文件序列化
    [转载]关于C++,我觉得好的设计法则
    如何高效地管理时间
    B站上适合程序员的学习资源【赶紧收藏!】
    Redis和Memcached的区别
    Swoole的多进程模块
    Mac OS 查看 ip 地址及 DHCP 各 addr 含义
    mac将phpstorm 从主屏移动到副显示器(解决)
  • 原文地址:https://www.cnblogs.com/Jusfr/p/5552572.html
Copyright © 2011-2022 走看看