rdc最佳实践之开发模式——git flow

引子

今天新建项目的时候,发现rdc除原有的分支模式以外还增加了master分支开发模式git flow模式,这是一件非常令人欣喜的事情——毕竟git flow是一个流传已久的,大家都普遍接受的开发模式。
于是我就把应用删掉了,改用git flow模式,目前体验很完美。
鉴于很多人可能还不太了解git flow,本文就对此分享一些微小的经验。

前言

你会用git吗?

我相信在座的大多数人都会自信的回答:“会”。
而实际上,大家可能从来没有考虑过自己的用法是否真的科学,真的健壮,尤其是项目越来越大,人数越来越多,周期越来越长的时候。

其中,典型的有以下几个问题:

  1. 当我开发某个功能到一半的时候,PM突然给我安排了一个新的紧急任务,我该怎么开始这个任务,而不影响现在的?
  2. 当我代码写好了的时候,如何发布?
  3. 当我发布后,代码出问题了,如何快速修复?
  4. 以上的情况,还要求修复后,还要包含之后开发的所有代码?

大部分开发人员使用git的时候,基本只使用两个甚至一个分支,所以下面的这些理念,显然是打开了一扇新世界的大门了。

方案

显然,不光代码有代码规范,代码的管理和协同同样需要一个清晰的流程和规范,由此,行业内的通用解决方案是Git Flow

怎么样,眼花缭乱吧,不过我可以给你个建议:把头左转90度,别着急骂....这是office picture,并非我画的。

在上面这幅图上,最上面的一行,代表分支,它们分别是

|名称|解释
|-|-
|master|这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改
|Develop|这个分支是我们是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支
|Feature|这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release
|Release|当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并到Master和Develop分支
|Hotfix|当我们在Production发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release.

实现细则

master分支

在master分枝上工作,我们需要遵循一个基本原则,所有在master分支上的commit应该tag.

feature分支

feature分支做完后,必须合并回develop分支, 合并完分支后一般会删点这个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

开发完成

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

release分支

分支名 release/*
release分支基于develop分支创建,打完release分支后,我们可以在这个release分支上测试,修改bug等。同时,其它开发人员可以基于开发新的feature,一旦打了release分支之后不要从develop分支上合并新的改动到Release分支
发布release分支时,合并releasemasterdevelop, 同时在master分支上打个tag记住release版本号,然后可以删除release分支了(当然,你可以选择不删除)。

开始release

git checkout -b release-0.1.0 develop

# Optional: Bump version number, commit
# Prepare release, commit

完成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

hotfix

分支名 hotfix/*
hotfix分支基于master分支创建,开发完后需要合并回masterdevelop分支,同时在master上打一个tag

开始hotfix

git checkout -b hotfix-0.1.1 master

完成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

工具

如果你能坚持看到这里,我真的为你感到欣喜,这说明你是用心学习的,并且是不畏艰险的,毕竟上面那么长的一大串的代码,可能已经使你感到畏惧。
而显然的是,作为通用的一个解决方案,不可能这么繁琐,那么,唯一的可能是——有!工!具!

平台 命令
OS X brew install git-flow
Linux apt-get install git-flow
Windows wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh
IDEA Git Flow Integration

其中还有一大部分是gui的,比较简单,本文就不再赘述了。下面着重介绍下命令行下的使用

  • 初始化: git flow init
  • 开始新Feature: git flow feature start MYFEATURE
  • Publish一个Feature(也就是push到远程): git flow feature publish MYFEATURE
  • 获取Publish的Feature: git flow feature pull origin MYFEATURE
  • 完成一个Feature: git flow feature finish MYFEATURE
  • 开始一个Release: git flow release start RELEASE [BASE]
  • Publish一个Release: git flow release publish RELEASE
  • 发布Release: git flow release finish RELEASE
    别忘了git push --tags
  • 开始一个Hotfix: git flow hotfix start VERSION [BASENAME]
  • 发布一个Hotfix git flow hotfix finish VERSION

仔细观察,这些命令都是有规矩的,它们大概可以如下图表示

时间: 2024-08-01 20:56:58

rdc最佳实践之开发模式——git flow的相关文章

Home Contact Gallery RSS Git 在团队中的最佳实践--如何正确使用Git Flow

我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为非常突出的几点. 由于是分布式,所有本地库包含了远程库的所有内容. 优秀的分支模型,打分支以及合并分支,机器方便. 快速,在这个时间就是金钱的时代,Git由于代码都在本地,打分支和合并分支机器快速,使用个SVN的能深刻体会到这种优势. 感兴趣的,可以去看一下Git本身的设计,内在的架构体现了很多的优

Git Flow—Git团队协作最佳实践

一.规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢失等. 就像代码需要代码规范一样,使用Git进行代码管理同样需要一个清晰的流程和规范, Git Flow就是一个被广泛认可的Git使用最佳实践. Git Flow是Vincent Driessen提出的一个分支管理的策略,http://nvie.com/posts/a-successful-gi

DB2 存储过程开发最佳实践

转自http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0604changhp/   DB2 存储过程开发最佳实践 常 伟 (changwei@cn.ibm.com), 软件工程师,IBM CSDL 常红 平 (changhp@cn.ibm.com), 软件工程师,IBM CSDL 简介: 本 文以 DB2 开发人员的角度介绍了在 DB2 存储过程开发中需要注意的事项和技巧.新手如果能够按照本文介绍的最佳实践来开发存

《AngularJS深度剖析与最佳实践》一1.4 实现第一个页面:注册

1.4 实现第一个页面:注册 接下来,我们开始实现第一个迭代的第一个功能:10.注册.我们把能够通过URL独立访问的一项功能简称为"一个路由",这里为注册功能分配一个叫作/reader/create的路由.之所以不使用/register的形式,是希望在各个URL之间保持统一,这也是我们在整个项目中将贯穿的一个约定. 1.4.1 约定优于配置 如同后端开发一样,我们将reader称为controller,create称作action,中间还可以有一个id,所以,典型的URL是这样的:/$

git学习------>Git 分支管理最佳实践

ps:本文转载于 : https://www.ibm.com/developerworks/cn/java/j-lo-git-mange/index.html Git 是目前最流行的源代码管理工具.大量的软件项目由 GitHub.Bitbucket 和 GitLab 这样的云服务平台或是私有的 Git 仓库来管理.在使用 Git 时通常会遇到的一个问题是采用何种分支管理实践,即如何管理仓库中作用不同的各类分支.和软件开发中的其他实践一样,Git 分支管理并没有普遍适用的最佳做法,而只有对每个团队

开发基于IBM Lotus Domino的Web 2.0应用的最佳实践

简介:本文介绍了开发基于 IBM Lotus Domino 的 Web 2.0 企业应用的最佳实践.这些最佳实践覆盖 系统开发的整个生命周期,包括系统设计阶段.实现阶段以及系统装配和部署阶段.根据本文所介绍的这 些方法,可以高效的开发高质量的基于 Domino 的 Web 2.0 企业应用. 背景简介和挑战 Domino 是 IBM Lotus 下面的一个旗舰产品,由于其提供了多层级的安全解决方案,内置集成的协同 服务应用和目录服务并提供灵活的数据库复制机制,因成为很多企业应用的重要平台. 随着

IBM PureApplication System 中的模式采用最佳实践

简介 过去几年,我们见证了中间件操作执行方式上的一次真正变革的开始.首先是发布了 IBM WebSphere CloudBurst Appliance 版本,然后推出了 IBM Workload Deployer 和 IBM PureApplication System 的后续版本,引入了基于模式的部署方法,这些已帮助客户在 IBM 中间件的计划.部署和管理方式上实现了根本改变.我们亲眼看到,此方法已改变了系统操作形势,还对采用它的公司中的开发和操作之间的关系产生了重大影响.这些基于模式的方法与

持久化模式,第 1 部分: 现代 ORM 工具的策略和最佳实践

简介 在过去 5 到 10 年中,开发人员对企业应用程序中的实体进行持久化的方式发生了根本性变化.早期的企业应用程序使用数据库表和 表之间的外键关系进行实体建模.应用程序被看作查看和查询数据库底层模型的方式.近几年,数据库中的实体建模逐渐向应用程序对象 模型中的实体建模转变.现在大家已经意识到,数据库仅仅是存储对象结构所定义的持久化信息的一种机制.把建模从数据库转移到对象 模型中有许多优点,包括: 持久化实体与对它们执行的操作更紧密地集成 有助于创建松散耦合的应用程序组件 与关系数据库相比,面向

用OSGi应用程序开发和工作的最佳实践

简介 OSGi 模块性提供了标准机制来以 Java 应用程序应对共同挑战.在 2007 年 ,OSGi Alliance Enterprise Expert Group (EEG) 成立,以一个业务 Java 编 程模型的形式向业务应用程序开发人员引入 OSGi 基础设施.OSGi 应用程序和 IBM WebSphere Application Server 企业级服务质量共同为模块化 Web 应用程 序提供最完整和最健壮的业务服务器.您可以使用 WebSphere Application Se