zoukankan      html  css  js  c++  java
  • 引入git flow分支管理

    先看下Vincent Driessen提出的分支管理模型图,以便对git flow有个大概的了解。

    两种核心分支

    主分支(Master)

    代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。这个分支只能从其它分支合并,不能在这个分支上直接修改。需要注意的是,所有在master上的提交应该标记tag。

    clipboard

    开发主分支(Develop)

    这个分支是我们是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支。该分支应该只是进行一些优化和升级开发,如果有新的需求应该拉出一个feature分支。

    三种临时分支

    功能(feature)分支

    这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release。

    clipboard[1]

    预发布(release)分支

    当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并到Master和Develop分支。

    clipboard[2]

    修补bug(hotfix)分支

    当我们在Production发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release。

    clipboard[3]

    这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有master和develop。

     

    Git Flow流程示例代码

    1,创建develop分支

    #从master拉出develop分支
    
    #可选,获取最新版本。git pull origin master
    
    git checkout -b develop master
    
    #发布develop分支
    
    git push -u origin develop

    2,创建feature分支

    #从develop拉出feature_v1.0功能分支
    
    #可选,获取最新版本。git pull origin develop
    
    git checkout -b feature_v1.0 develop
    
    #发布feature_v1.0分支
    
    git push -u origin feature_v1.0
    
    #在feature_v1.0上开发一些功能

    3,完成feature,合并到develop分支

    #develop分支获取最新
    
    git pull origin develop
    
    #切换到develop分支
    
    git checkout develop
    
    #从feature分支合并到develop分支
    
    git merge --no-ff feature_v1.0
    
    #删除feature分支,也可以不删除
    
    git branch -d feature_v1.0

    4,开始release

    #从develop拉出一个release分支
    
    #可选,获取最新版本。git pull origin develop
    
    git checkout -b release_v1.0 develop
    
    #fix bugs

    5,完成release,合并到master分支和develop分支,在master打上tag标记

    #合并到master
    
    git checkout master
    
    git merge --no-ff release_v1.0
    
    #在master打tag标记
    
    git tag release1.0 master
    
    git push --tags
    
    #合并到develop
    
    git checkout develop
    
    git merge --no-ff release_v1.0

    6,开始hotfix

    #从主线master拉出一个hotfix分支
    
    #可选,获取最新版本。git pull origin master
    
    git checkout -b hotfix_v1.0.1 master

    7,完成hotfix,合并到master和develop,并在master上打tag。

    #合并hotfix_v1.0.1到master
    
    git checkout master
    
    git merge --no-ff hotfix_v1.0.1
    
    #在master打上tag
    
    git tag hotfix1.0.1 master
    
    git push --tags
    
    #合并hotfix_v1.0.1到develop
    
    git checkout develop
    
    git merge --no-ff hotfix_v1.0.1

    Git Flow工具

    1,SourceTree

    2,GitFlow for Visual Studio

     

    分支命名规范

    feature分支:以"feature_"开头,如feature_v1.1

    release分支:以"release_"开头,如release_v1.1

    hotfix分支:以"hotfix_"开头,如hotfix_20160112

    tag标记:如果是release分支合并,则以"release_"开头。如果是hotfix分支合并,则以"hotfix_"开头。

    master分支每次提交都要打tag,release tag:如release_v1.1,hotfix tag:如hotfix_20160112

    命名都统一采用小写。

     

    总结

    1,一定要按git flow的流程去管理分支,如feature分支开发完要合并到develop,如果要发布版本到test环境,则从develop拉出一个release分支,release完成后要合并回master和develop分支,修复生产环境问题需要从master拉出一个hotfix分支,hotfix完成后要合并回master和develop分支,并且在master打上tag。

    2,一定要按分支命名规范来命名,便于管理和维护。

    3,了解了git flow工作流程后,可以不使用git flow GUI工具,手动操作即可,可以是原生git命令+vs配合操作,比如给master打tag就要用git命令,这在vs里操作不了的,比如合并分支,虽然也可以使用git命令实现,但在vs里操作更方便直观。

    4,一定要保持分支的纯净,不要随便污染分支。比如,develop分支只包含要发布到下一个release的代码,在没有拉出release分支前不要合并新的feature分支进来。release分支基于develop分支创建,拉出release分支后,我们可以在这个release分支上测试和修复bug,但是,一旦打了release分支后不要从develop分支合并新的改动过来。develop拉出release分支的同时,也意味着develop分支可以开始下一个release的准备工作了。

    5,如果多个版本并行到test环境,怎么解决这个问题?如下图。

    clipboard[4]

  • 相关阅读:
    169. Majority Element
    283. Move Zeroes
    1331. Rank Transform of an Array
    566. Reshape the Matrix
    985. Sum of Even Numbers After Queries
    1185. Day of the Week
    867. Transpose Matrix
    1217. Play with Chips
    766. Toeplitz Matrix
    1413. Minimum Value to Get Positive Step by Step Sum
  • 原文地址:https://www.cnblogs.com/diandianquanquan/p/11351634.html
Copyright © 2011-2022 走看看