Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • 操作系统

  • 计算机网络

  • 数据结构和算法

  • MySQL

  • Redis

  • Nginx

  • MongoDB

  • 其他

    • 阿里开源ETL工具:dataX上手指南
    • 常见的 POST 提交数据方式
    • 大型网站架构设计总结
    • SSL证书分类与选择指南
    • Times33哈希算法
    • Unicode,ASCII,UTF-8的区别
    • Git使用总结
    • GitFlow在团队协作中的实践
      • 前言
      • GitFlow介绍
      • GitFlow分支介绍
        • master分支
        • develop分支
        • feature分支
        • release分支
        • hotfix分支
      • GitFlow工作流程
        • 初始分支
        • Feature 分支
        • Release分支
        • 维护分支 Hotfix
      • GitFlow常见操作
      • GitFlow工具
        • 安装
        • 使用
    • 服务器进程管理利器-Supervisor
  • 计算机基础
  • 其他
Ravior
2018-09-13
目录

GitFlow在团队协作中的实践

# 前言

Git是一款优秀的版本管理工具,但是在面对版本管理的时候,依然有非常大的挑战,比如:

  • 如何开始一个Feature(功能)的开发,而不影响别的Feature?
  • 由于很容易创建新分支,分支多了如何管理,时间久了,如何知道每个分支是干什么的?
  • 哪些分支已经合并回了主干?
  • 如何进行Release的管理?开始一个Release的时候如何冻结Feature, 如何在Prepare Release的时候,开发人员可以继续开发新的功能?
  • 线上代码出Bug了,如何快速修复?而且修复的代码要包含到开发人员的分支以及下一个Release?

大部分开发人员现在使用Git就只是用三个甚至两个分支,一个是Master,一个是Develop,还有一个是基于Develop打得各种分支,这个在小项目规模的时候还勉强可以支撑,因为很多人做项目就只有一个Release, 但是人员一多,而且项目周期一长就会出现各种问题。

# GitFlow介绍

GitFlow工作流定义了一个围绕项目发布的严格分支模型,是一种Git使用方法论,它为不同的分支分配了明确的角色,并定义分支之间何时以及如何进行交互。

GitFlow使用了五种分支来进行协作:

  • 长期分支

    • 主分支(master)
    • 开发分支 (develop)

    master 分支一般对应的是生产环境的代码,是稳定的发布版本;develop 分支对应的是开发环境的代码,存放的都是最新的开发版。

  • 短期分支

    • 功能分支(feature)
    • 补丁分支(hotfix)
    • 预发分支(release)

    一旦完成开发,它们就会被合并进 develop 或 master,然后被删除。

下面是Git Flow的流程图:

Git Flow

# GitFlow分支介绍

# master分支

存储正式发布的产品,master分支上的产品要求随时处于可部署状态。master分支只能通过与其他分支合并来更新内容,禁止直接在master分支进行修改。

# develop分支

汇总开发者完成的工作成果,develop分支上的产品可以是缺失功能模块的半成品,但是已有的功能模块不能是半成品。develop分支只能通过与其他分支合并来更新内容,禁止直接在develop分支进行修改。

# feature分支

当要开发新功能或者试验新功能时,从develop分支创建一个新的feature分支,并在feature分支上进行开发。开发完成后,需要将该feature分支合并到develop分支,最后删除该feature分支。

# release分支

当develop分支上的项目准备发布时,从develop分支上创建一个新的release分支,新建的release分支只能进行质量测试、bug修复、文档生成等面向发布的任务,不能再添加功能。这一系列发布任务完成后,需要将release分支合并到master分支上,并根据版本号为master分支添加tag,然后将release分支创建以来的修改合并回develop分支,最后删除release分支。

# hotfix分支

当master分支中的产品出现需要立即修复的bug时,从master分支上创建一个新的hotfix分支,并在hotfix分支上进行bug修复。修复完成后,需要将hotfix分支合并到master分支和develop分支,并为master分支添加新的版本号tag,最后删除hotfix分支。

# GitFlow工作流程

# 初始分支

所有在Master分支上的Commit应该Tag

Git Flow

# Feature 分支

分支名 feature/*

Feature分支做完后,必须合并回Develop分支, 合并完分支后一般会删点这个Feature分支,但是我们也可以保留

Git Flow

# Release分支

分支名 release/*

Release分支基于Develop分支创建,打完Release分之后,我们可以在这个Release分支上测试,修改Bug等。同时,其它开发人员可以基于开发新的Feature (记住:一旦打了Release分支之后不要从Develop分支上合并新的改动到Release分支)

发布Release分支时,合并Release到Master和Develop, 同时在Master分支上打个Tag记住Release版本号,然后可以删除Release分支了。

Git Flow

# 维护分支 Hotfix

分支名 hotfix/*

hotfix分支基于Master分支创建,开发完后需要合并回Master和Develop分支,同时在Master上打一个tag

Git Flow

# GitFlow常见操作

  • 创建develop分支
git branch develop
git push -u origin develop    
1
2
  • 开始新Feature开发
git checkout -b some-feature develop
# Optionally, push branch to origin:
git push -u origin some-feature    

# 做一些改动    
git status
git add some-file
git commit    
1
2
3
4
5
6
7
8
  • 完成Feature
git pull origin develop
git checkout develop
git merge --no-ff some-feature
git push origin develop

git branch -d some-feature

# If you pushed branch to origin:
git push origin --delete some-feature    
1
2
3
4
5
6
7
8
9
  • 开始Relase
git checkout -b release-0.1.0 develop

# Optional: Bump version number, commit
# Prepare release, commit
1
2
3
4
  • 完成Release
git checkout master
git merge --no-ff release-0.1.0
git push

git checkout develop
git merge --no-ff release-0.1.0
git push

git branch -d release-0.1.0

# If you pushed branch to origin:
git push origin --delete release-0.1.0   

git tag -a v0.1.0 master
git push --tags
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • 开始Hotfix
git checkout -b hotfix-0.1.1 master    
1
  • 完成Hotfix
git checkout master
git merge --no-ff hotfix-0.1.1
git push

git checkout develop
git merge --no-ff hotfix-0.1.1
git push

git branch -d hotfix-0.1.1

git tag -a v0.1.1 master
git push --tags
1
2
3
4
5
6
7
8
9
10
11
12

# GitFlow工具

当你理解了上面的流程后,你完全可以不用使用工具,但是实际上我们大部分人很多命令就是记不住呀,流程就是记不住呀,就有开发者提供了Git Flow工具。

# 安装

  • MacOS
brew install git-flow
1
  • Linux
apt-get install git-flow
1
  • Windows
wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
1

# 使用

Git Flow

# 初始化git flow项目,会创建master和develop两分支
git flow init

# 开始新Feature:
git flow feature start FeatureName

# publish一个Feature(也就是push到远程)
git flow feature publish FeatureName

# 获取publish的Feature
git flow feature pull origin FeatureName

# 完成一个Feature
git flow feature finish FeatureName

# 开始一个Release
git flow release start ReleaseName [BASE]

# publish一个Release
git flow release publish ReleaseName

# 发布Release
git flow release finish ReleaseName

# 开始一个Hotfix
git flow hotfix start VERSION [BASENAME]

# 发布一个Hotfix
git flow hotfix finish VERSION
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#Git
上次更新: 2022/12/01, 11:09:34
Git使用总结
服务器进程管理利器-Supervisor

← Git使用总结 服务器进程管理利器-Supervisor→

最近更新
01
常用游戏反外挂技术总结
11-27
02
Golang开发实践万字总结
11-11
03
Redis万字总结
10-30
更多文章>
Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式