在去年的大约这个时候,我的领导让我研究一下git的使用方法,方便我们自己的代码管理,因为我们原先使用的是SVN,使用起来没那么方便,所以让我研究研究git的使用。我就简单的研究了两天,用我的IDE(vs2015)试了下,还不错,然后开发了一个月之后,整个部门都换成了git进行项目代码的版本控制。到现在为止已经使用了git接近一年了。

就是因为当初简单的研究了两天,这接近一年的时间里只是使用的git的基本功能,没有把git分支的强大使用起来,在两个月前发现了我们使用的git分支的问题,所以在分支使用方面进行了改进,把我的心得也给大家分享一下。

关于分支的使用,我从网上找到了一些相关的资料,网上常见的分支使用是分三种:master(主干)、develop(开发)、publish(发布)三种常规分支。而我们根据网上的先进行了一个迭代,而后觉得有点不符合我们的使用场景,所以我们自己又有了其他的使用方式,下面我给大家分享一下。

项目的初始时会默认有一个master分支,也就是我们常说的主干分支,主干分支的代码与线上运行的代码是一致的,而且平时开发的代码不能推送到master分支上去,所以master分支平时是锁死的,也就是设置成只读的,任何人都不能推送代码到master分支上去。

假如我们现在有个学生管理系统的项目【StudentSystem】,我们要开发一个新功能—考试功能。那么我们需要建两种分支,一个是发布分支,一个是开发分支。

关于开发

发布分支的创建时间也分两种,一种是开发之前就建好,另外一种是开发完成之后创建开发分支,不管是哪种,发布分支的代码始终是与master分支的代码是一致的。

咱们采取第一种,开发之前就开始创建发布分支。

发布分支名为:

studentsystem_v1.0_exam_publish_from_master(0812build) 或者 studentsystem_v1.0_考试功能_发布分支_from_主干(0812创建)

项目名字_版本号_分支状态_from_从哪个分支创建(何时创建)

总之分支的名字让人看到后能明白这个分支是做什么的即可。

开发分支:

studentsystem_v1.0_exam_develop_from_publish1.0(0812build)  或者  studentsystem_v1.0_考试功能_开发分支_from_发布分支1.0(0812创建)

网上查到的资料是到这里就完事了,但是我们开发项目,开发这一个功能是需要2个或者大于2个人的,多人在同一个分支下开发的话,肯定会有冲突,而且不好进行代码审核,所以我们使用了git的pull request,所以就有下面的,

再创建个人的开发分支,

从主开发分支创建个人开发分支,命名如下:

studentsystem_v1.0_ls_exam_develop_from_develop1.0(0812build)  或者  studentsystem_v1.0_李四_考试功能_开发分支_from_开发分支1.0(0812创建)

这样就可以每个人有一个自己的开发分支,每天下班之前提交当天的代码到服务器上,然后提交pull request使代码合并到主开发分支上去,就可以方便大家进行代码审核。

然后第二天早上上班之后首先修改昨天提交的pull request中被别人发现的问题,再提交代码到服务器上,等待所有的pull request被审核通过后,大家要从主开发分支上拉取代码合并到各自的开发分支上去。

最后再进行自己今天的开发任务即可。

关于测试

提交测试之前

保证所有的开发人员的代码已经全部提交到服务器上并全部通过了pull request。然后把主开发分支(studentsystem_v1.0_exam_develop_from_publish1.0(0812build))的代码拉取到本地合并到最新的发布分支(studentsystem_v1.0_exam_publish_from_master(0812build))【这就是我说开发之前创建可以,开发完成后创建也可以的原因】上去,但是,合并之前一定要保证发布分支上的代码是与master分支的代码是一致的,否则测试等于白测。记住:向发布分支上合并代码是不会有冲突的,如果有冲突说明你发布分支的代码不与master分支的代码一致或者你的开发分支代码有问题。

提交测试后

我们项目的测试是分两轮:第一次测试和回归测试。在测试期间不能往测试环境中发布新的代码(就是说在进行第一轮测试的时候,出现了20多个bug,开发人员修改的比较快,在测试人员还未完全测试一轮的情况下,已经修改了大半,这种情况也不要发布新的测试版本,否则测试人员的第一轮相当于白测,覆盖了测试人员原先的测试成果。一定要等测试人员完全测试一遍才可以发布新的测试版本。),

如果遇到了阻塞的bug怎么办?

这样也不能发布新的测试版本吗?这样肯定是可以发布新的测试版本的,但是新的测试版本不是从开发人员正在开发的分支合并到发布分支上去,然后发布到测试环境中,而是从发布分支上打一个修改阻塞bug的分支出来:

studentsystem_v1.0_exam_[block_bug_name(bug的名字) or block_bug_code(bug的编号)] _from_develop1.0(0827build),

修改完成后合并到发布分支上去,然后发布到测试环境中,这样就不用打断或者影响测试正在进行的测试了。

也就是说发布分支的代码与测试环境的一致。

重要的:

发布分支权限设置为保护分支【只有管理员才可以推送代码到服务器上】,这样保证入口的唯一性,只有本次迭代负责人才可以合并代码到发布分支上去。

关于发布

发布我们分为预发布和正式发布。

预发布就是模拟真实发布环境进行发布,执行sql脚本,修改相关的配置,把发布分支的代码发布到预发布环境中。

说到这想起来一件事:我们每次进行项目的预发布时,总是很顺利,速度也很快,也没有遇到问题,然后在正式发布的时候,总是遇到各种问题,各种不顺利,所以这就导致预发布是没有意义的,正式发布后与测试环境下的功能也不一致,就是测试环境和预发布环境下功能么有问题,正式发布时也有问题。本次迭代结束后,我们经过讨论后想到了一个解决方案:就是发布测试环境也需要服务器管理人员(也就是测试人员)输入服务器密码,就是说测试服务器、发布服务器、正式服务器的密码只有测试人员知道,只有在发布测试版本的时候,只有测试人员输入密码后才可以发布新的测试版本到服务器上。开发人员使用开发服务器即可,只需要保证开发服务器上的数据库数据和数据库结构与正式的一致即可。

正式发布的时候可以是发布分支代码,也可以把发布分支的代码合并到master分支上,然后进行发布,注意:从发布分支合并到master分支也一定不会有冲突,否则肯定是你发布分支代码有问题。

以上就是我遇到的问题和解决方案以及git分支的使用心得。

Git分支使用心得的更多相关文章

  1. Git使用与心得体会

    Git使用与心得体会 一.闲聊 闲暇时间学一下Git,也算是不用在网页端操作github了 二.Git相关 集中式与分布式 Git是一个分布式的版本控制系统,而传统的SVN则属于集中式 集中式与分布式 ...

  2. Git 分支

    Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,某一次的提交指向这处时刻的文件快照,看起来就像每次提交都保存了当时的文件,连续的提交形成一条长链 分支 指向某一个特定的提交,不同的 ...

  3. Git分支管理

    一.Git分支的使用 查看分支: git branch 创建分支: git branch branch1 切换到branch1 git checkout branch1 再用git branch查看, ...

  4. Git分支的前世今生

    摘自Jack__CJ  CSDN博客,写得很好,保存一下. 导读 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系 ...

  5. GIT分支管理模型

    GIT分支管理模型 link: git-branching-model 主分支(Main branches) 项目两个常驻分支: master 主干分支(锁定),仅用于发布新版本,平时不能在上面干活, ...

  6. Git详解之三 Git分支

    相关文档 — 更多 Git 基础培训.ppt GIT 使用经验.ppt GIT 介绍.pptx GIT 分支管理是一门艺术.docx Eclipse上GIT插件EGIT使用手册.docx git/gi ...

  7. git初体验(三)git分支

    分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,然后每个猴子做自己的事情互不干涉,等到所有猴子做完之后,猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了. 你创建了一个 ...

  8. 如何在终端实时展现git分支

    在微博上看到ghosTM55在终端可以实时展现出当前运行的分支,觉得很奇特,于是google了一把.这里面存在两个内容,第一个bash,第二个是git bash基础: 了解到linux的shell存在 ...

  9. php 通过exec 创建git分支失败

    今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的 新建分支命令如下 git fetch -- ...

随机推荐

  1. cvCvtColor与cvtColor区别

    用到了rgb转灰度图功能,查到两个函数,发现名字很像,功能也一样,但是参数类型不一样. 记录一下. 可以看声明,cvCvtColor是c语言风格接口. /* Converts input array ...

  2. [leetcode-575-Distribute Candies]

    Given an integer array with even length, where different numbers in this array represent different k ...

  3. 怎么用VBS脚本自动注册yy娱乐的账号

    set WshShell=WScript.CreateObject("WScript.Shell") Const user = "hugetech2" Cons ...

  4. java桥连接sql server之登录验证及对数据库增删改查

    一:步骤 1.sql server建立数据库和相关表 2.建立数据源  (1).打开控制面板找到管理,打开ODBC选项或直接搜索数据源  (2).打开数据源配置后点击添加,选择sql server点击 ...

  5. poj1083,基本互斥问题

    题意:南北两侧各有200个房间,两侧房间之间有一个走廊 现在需要把桌子从这400个房间之中搬进搬出,每一张桌子需要10分钟时间,如果走廊因为有桌子搬运而占用,则需等待,求共需多少时间(分钟)将桌子搬完 ...

  6. MyBatis源码解析【1】准备工作

    终于迎来了这一天,我觉得现在的我在经历了长时间的学习和开发之后有了一定的经验,所以准备开始学习源码. 今天我将做好充足的准备,在接下来的一个月中,努力的爬过这座大山.(可能不用一个月,但是我觉得需要仔 ...

  7. php 时间问题

    获得简单的日期 date() 函数的格式参数是必需的,它们规定如何格式化日期或时间. 下面列出了一些常用于日期的字符: d - 表示月里的某天(01-31) m - 表示月(01-12) Y - 表示 ...

  8. DotNetCore跨平台~服务总线_事件总线的重新设计

    理论闲话 之前在.netFramework平台用的好好的,可升级到.net core平台之后,由于不再需要二进制序列化,导致咱们的事件机制遇到了问题,之前大叔的事件一直是将处理程序序列化后进行存储的, ...

  9. oracle常用函数及关键字笔记

    --函数及关键字--1.trim,ltrim,rtrim 去除字符,无指定默认去除空格SELECT TRIM('a' FROM 'aafhfhaaaaaaaa'), LTRIM('aafhfhaaaa ...

  10. 智联招聘 卓聘IM演进过程

    1.  卓聘IM开发背景 智联卓聘是智联旗下高端人才招聘平台,成立快4年了,业务增涨每年以100%速度增涨,业务增涨快在开发和上线速度要求也比较高. 2016年6月提出IM开发需求,7月初上线,开发人 ...