目前所在公司开发的系统为一个基础版本(通用版)包含了行业内一些基础功能实现,后期根据不同厂家进行定制版的开发,考虑独立项目的话代码维护不太方便,并且如果通用版本有变动的话,其他定制版本也都需要进行变动。

**gitflow工作流**

公司之前采用svn进行维护代码,最近才开始进行转变到用git 进行维护,在学习的过程中对比了一番最终选择采用gitflow工作流进行管控,
具体介绍如下:

**master分支**:主分支,可随时交付给用户使用的版本

**dev分支**:开发分支,项目组内用于开发的分支,并且保证该分支代码是可运行

**feature分支**:功能分支,项目中开发新需求或者修改bug都在此分支上进行。

**release分支**:测试分支,开发完成之后,基于dev创建该分支

**hotfix分支**:bug修复分支,用于修复bug,发现bug创建此分支进行修复,基于release或者master分支创建

由于现在处于开发阶段故现在对分支的维护方面没有那么完善,而且公司内部没有测试人员,现在的测试流程都是写完代码内部自己进行测试,现在进行开发的时候一般都是基于dev分支创建feature分支:

**创建feature分支以及合并方案**

* 当前处于dev分支或者release分支,基于dev或者release创建新分支

* 创建新功能分支并且切换到该分支,当该功能开发完毕之后,如果该功能开发周期较长,每天从dev分支合并到功能分支上,避免跟dev分支差异较大
* 当功能开发完成合并到dev或者release分支当中,完成之后删除本地分支,避免本地分支过多,分不清功能是否合并。

**创建release分支以及合并方案**

* 当前处于dev分支当中,基于dev分支创建release分支
* 创建该分支之后,进行打包发布测试,如果测试当中发现bug,创建hotfix分支,进行修复bug,创建hotfix分支主要想的是多人开发过程中,发现那个模块谁负责,谁去修改bug
* 当该分支测试完成之后合并到master和dev分支当中

**创建hotfix分支以及合并方案**
* 当前处于release分支或者master分支当中
* 当release分支发现bug之后,根据release分支创建该分支,进行修复bug。
* 该分支修改完成之后如果是release的bug合并到release分支就可,如果是基于master分支创建的还需要合并到dev分支当中

**命名规则**

分支命名方式采用如下规则
例如: add_user_20180302
add:代表工作类型user代表具体功能模块:
user:具体的功能模块
20180302:分支创建时间

**git注释提交规范**

注释提交采用如下规则
例如:[修复bug]:bug号
1.修复的具体功能

****

基于上述规范根据我们项目组的情况,创建了如下三个版本的分支结构如下:

* master分支
* master-A分支
* master-B分支

**master分支**

基础版本分支,开发一些通用功能(目前所有工作都是在此版本开发)

**master-A分支**

基于通用版本生成的一个分支版本,根据A客户提出的新需求进行客制化的开发

**master-B分支**

基于通用版本生成的分支版本,根据B客户提出的新需求进行客制化开发

**master分支维护**

master版本维护分如以下:
dev
release/
hotfix/
feature/

**master-A/master-B维护**

master-A或者master-B版本维护分支如下:
dev-A
release-A/
hotfix-A/
feature-A/

**基础版本同步方案**

当基础版本有新功能开发,或者是修复之前遗留的bug,开发完成之后,合并到其他master-A或者master-B分支当中,避免重复开发带来的时间成本。

**开发注意事项**

根据不同的业务创建分支的时候选择创建不同的分支,例如master分支在进行创建功能分支的时候应该是:

* feature/add_user_0302

master-A创建功能分支应该是:
* feature-A/add_user_0302

_注:此方案目前只是一个规划,如果您有更好的方案还请留言告知_

git程序多版本维护方案的更多相关文章

  1. GIT(分布式版本控制系统)

    Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.[1] Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本 ...

  2. 杂项:GIT (分布式版本控制系统)

    ylbtech-杂项:GIT (分布式版本控制系统) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git的读音为/gɪt/.Git是一个开源的分布式版本控制系统 ...

  3. Git恢复之前版本的两种方法reset、revert(图文详解)

    一.问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(reve ...

  4. Git学习--创建版本库

    什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...

  5. Git恢复之前版本的两种方法reset、revert(图文详解)(转)

    一.问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(reve ...

  6. 在小程序中实现 Mixins 方案

    摘要: 小程序开发技巧 作者:jrainlau 原文:在小程序中实现 Mixins 方案 Fundebug经授权转载,版权归原作者所有. 在原生开发小程序的过程中,发现有多个页面都使用了几乎完全一样的 ...

  7. Git 程序员篇

    关于 Git Git 背后的故事 伟大的作品总是诞生于伟大的时代,正如 Git 同样诞生于一个英雄辈出.极富纷争的年代. 2005 年,Linux 内核开发社区正面临严峻的挑战:他们不能继续使用 Bi ...

  8. Git恢复之前版本的两种方法reset、revert

    实战 回退 1.删除之前的提交 git reset --hard id 推送到远程 git push -f [git log中确实删除了,但是拿到可以恢复] 2.不删除之前的提交 git revert ...

  9. 【Git学习笔记】初始化Git仓库和版本回退

    学习地址 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 什么是版本库呢?版本库又 ...

随机推荐

  1. Xapth 添加注释头

    private static void updateMybatisXml(String url, String username, String password) { DocumentBuilder ...

  2. Python并发编程之创建多线程的几种方法(二)

    大家好,并发编程 进入第二篇. 今天的内容会比较基础,主要是为了让新手也能无障碍地阅读,所以还是要再巩固下基础.学完了基础,你们也就能很顺畅地跟着我的思路理解以后的文章. 本文目录 学会使用函数创建多 ...

  3. Scrapy爬虫框架第一讲(Linux环境)

    1.What is Scrapy? 答:Scrapy是一个使用python语言(基于Twistec框架)编写的开源网络爬虫框架,其结构清晰.模块之间的耦合程度低,具有较强的扩张性,能满足各种需求.(前 ...

  4. Python_二叉树

    BinaryTree.py '''二叉树:是每个节点最多有两个子树(分别称为左子树和右子树)的树结构,二叉树的第i层最多有2**(i-1)个节点,常用于排序或查找''' class BinaryTre ...

  5. C# Linq GroupBy 分组过滤求和

    var delOrderData = orderLogList.Where(x => (x.OlStatus == 0 && x.OlUpId == null)).GroupBy ...

  6. backbone的一些认识

    body,td { font-family: 微软雅黑; font-size: 10pt } 官网:http://backbonejs.org/ 作者:Jeremy Ashkenas 杰里米·阿什肯纳 ...

  7. python3中使用builtwith的方法(很详细)

    1. 首先通过pip install builtwith安装builtwith C:\Users\Administrator>pip install builtwith Collecting b ...

  8. async 和 await 之异步编程的学习

    async修改一个方法,表示其为异步方法.而await表示等待一个异步任务的执行.js方面,在es7中开始得以支持:而.net在c#5.0开始支持.本文章将分别简单介绍他们在js和.net中的基本用法 ...

  9. java异常基础整理

    1.try-catch e.printStackTrace(); 会打印出方法的调用痕迹,如此例,会打印出异常开始于TestException的第16行,这样就便于定位和分析到底哪里出了异常 2.使用 ...

  10. 一个C++程序中有多个cin输入的情况

    在很多C++程序中,我们都会有几次输入的操作.这种情况下,会遇到只有第一个cin语句被执行了,而后面的cin都没有执行.这是因为cin所输入的数据都放在cin缓冲区中,当第一次使用cin后,缓冲区中已 ...