代码管理之gitflow工作流程学习和使用

329 阅读5分钟

背景

当在团队开发中使用版本控制系统时,商定一个统一的工作流程是至关重要的。Git 的确可以在各个方面做很多事情,然而,如果在你的团队中还没有能形成一个特定有效的工作流程,那么混乱就将是不可避免的。
基本上你可以定义一个完全适合你自己项目的工作流程,或者使用一个别人定义好的。
这里我们将一起学习一个当前非常流行的工作流程 git-flow

git-flow是什么

git-flow并非什么技术,而是一种代码开发合并管理流程的思维模式或者是管理方法。大家一起开发的一种软约定。
严格来讲,你并不需要安装什么特别的东西就可以使用 git-flow 工作流程。你只需要了解,哪些工作流程是由哪些单独的任务所组成的,并且附带上正确的参数,以及在一个正确的顺序下简单执行那些对应的 Git 命令就可以了。当然,如果你使用 git-flow 脚本就会更加方便了,你就不需要把这些命令和顺序都记在脑子里。

git-flow安装

git-flow安装教程

git-flow工作流程

image.png

1.Master 分支: 稳定版本代码分支,用作发布环境,上面的每次提交都是可以发布的。

2.Feture 分支: 功能分支,用于开发功能(需求),用于开发环境

3.Developer 分支: 开发分支, 一旦Feture分支内功能开发完成就将Feture中的代码合并到Developer分支中,合并完成后,删除该功能分支。这个分支对应的是集成测试环境。

4.Release 分支:预发分支,做发布前的准备工作,对应的是预发环境。这个分支可以确保们开发继续向前,不会因为要发布不而被停滞住。一旦Release分支达到了可发布的状态,我们需要把Release分支同时向Master,Developer分支上合并,保持代码的一致性,然后把Release分支删除。

5.Hotfix 分支: 线上bug修缮用的分支,每次修改线上代码的bug时都要用hotfix来维护,完成后向Developer和Master同时合并。完成后删除分支。

git-flow的使用

1、git flow init (初始化Git仓库)

在项目的根目录执行 “git flow init” 命令时,会在本地仓库中预设两个主分支(master/develop),并对Realse、Feature、hotfix等分支配置了一些命名规则

image.png 2、 git flow feature start 【featureName】(功能开发)
执行该命令会在develop上切一个分支,分支前缀为feature/,名称为【featureName】,并切换到当前新增的这个分支

image.png

3、git flow feature finish 【featureName】(功能开发完成,分支提交并合并develop)
执行该命令会将分支代码合并到develop,当前分支切换到develop并同时删除当前分支(包括本地和远程仓库的)(在执行该命令前先develop代码合并到该分支,避免代码冲突)

image.png

image.png 4、git flow release start 【releaseName】(创建一个成熟的release版本)
执行该命令会在develop上切一个分支,分支前缀为release/,名称为【releaseName】,并切换到当前新增的这个分支

image.png 5、git flow release finish 【releaseName】(版本发布)
这个命令会完成如下一系列的操作:

  1. 首先,git-flow 会拉取远程仓库,以确保目前是最新的版本。
  2. 然后,release 的内容会被合并到 “master” 和 “develop” 两个分支中去,这样不仅产品代码为最新的版本,而且新的功能分支也将基于最新代码。
  3. 为便于识别和做历史参考,release 提交会被标记上这个 release 的名字(在我们的例子里是 “1.0.1”)。
  4. 清理操作,版本分支会被删除,并且回到 “develop”。

image.png 注: 若出现报错可以使用(git flow release finish -m 'test' '1.0.1')命令 6、git flow hotfix start 【hotfixName】(生产bug修复分支) 执行该命令会在master上切一个分支,分支前缀为hotfix/,名称为【hotfixName】,并切换到当前新增的这个分支

7、git flow hotfix finish 【releaseName】(生产bug修复分支发布)
这个命令会完成如下一系列的操作:

  1. 首先,git-flow 会拉取远程仓库,以确保目前是最新的版本。
  2. 然后,hotfix 的内容会被合并到 “master” 和 “develop” 两个分支中去,这样不仅产品代码为最新的版本,而且新的功能分支也将基于最新代码。
  3. 清理操作,版本分支会被删除,并且回到 “develop”。

git-flow的缺陷

1、切feature分支时不会修改pom文件版本号,导致如果同时拉取多个future分支进行开发,并对外提供api接口jar包,无法区分版本

2、release分支和hotfix分支合并到develop分支时不会修改pom文件版本号,并让版本号叠加

以上缺点导致我们每次合并后还得人工修改版本号,非常麻烦,那有没有什么好的办法解决这个问题了,答案是肯定的,gitflow-maven-plugin插件就完美的解决上述问题

gitflow-maven-plugin的使用

Git Flow Maven插件支持各种Git工作流,包括GitFlow和GitHub流

1、插件获取

<build>
    <plugins>
        <plugin> 
            <groupId>com.amashchenko.maven.plugin</groupId> 
            <artifactId>gitflow-maven-plugin</artifactId> 
            <version>1.18.0</version> 
            <configuration>
            <!-- optional configuration --> 
            </configuration> 
        </plugin>
    </plugins> 
</build>

2、功能集

  • gitflow:release-start-启动发布分支并将版本更新为发布版本。
  • gitflow:release-finish-合并发布分支并将版本更新到下一个开发版本。
  • gitflow:release-发布项目,不创建发布分支。
  • gitflow:feature-start-启动功能分支并可选地更新版本。
  • gitflow:feature-finish-合并特征分支。
  • gitflow:hotfix-start-启动修补程序分支并将版本更新为修补程序版本。
  • gitflow:hotfix-finish-合并修补程序分支。
  • gitflow:support-start-从生产标记启动支持分支。
  • gitflow:version-update-更新发布或支持分支中的版本,可以选择标记并将其推送到远程存储库。
  • gitflow:help-显示帮助信息。

3、示例

1)mvn gitflow:feature-start -DpushRemote=true(功能开发)

image.png

2)mvn -DpushRemote=true -DkeepBranch=true gitflow:feature-finish(提交feature分支)

image.png

3)mvn gitflow:release-start -DpushRemote=true(切release分支)

image.png 4)mvn gitflow:release-finish -DpushRemote=true -DkeepBranch=true develop分支 image.png

master分支 image.png

4、gitflow-maven-plugin插件的详解

gitflow-maven-plugin