Git分支使用心得
在去年的大约这个时候,我的领导让我研究一下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分支使用心得的更多相关文章
- Git使用与心得体会
Git使用与心得体会 一.闲聊 闲暇时间学一下Git,也算是不用在网页端操作github了 二.Git相关 集中式与分布式 Git是一个分布式的版本控制系统,而传统的SVN则属于集中式 集中式与分布式 ...
- Git 分支
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照,某一次的提交指向这处时刻的文件快照,看起来就像每次提交都保存了当时的文件,连续的提交形成一条长链 分支 指向某一个特定的提交,不同的 ...
- Git分支管理
一.Git分支的使用 查看分支: git branch 创建分支: git branch branch1 切换到branch1 git checkout branch1 再用git branch查看, ...
- Git分支的前世今生
摘自Jack__CJ CSDN博客,写得很好,保存一下. 导读 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系 ...
- GIT分支管理模型
GIT分支管理模型 link: git-branching-model 主分支(Main branches) 项目两个常驻分支: master 主干分支(锁定),仅用于发布新版本,平时不能在上面干活, ...
- Git详解之三 Git分支
相关文档 — 更多 Git 基础培训.ppt GIT 使用经验.ppt GIT 介绍.pptx GIT 分支管理是一门艺术.docx Eclipse上GIT插件EGIT使用手册.docx git/gi ...
- git初体验(三)git分支
分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,然后每个猴子做自己的事情互不干涉,等到所有猴子做完之后,猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了. 你创建了一个 ...
- 如何在终端实时展现git分支
在微博上看到ghosTM55在终端可以实时展现出当前运行的分支,觉得很奇特,于是google了一把.这里面存在两个内容,第一个bash,第二个是git bash基础: 了解到linux的shell存在 ...
- php 通过exec 创建git分支失败
今天给我们自己的发布系统增加一个新建分支的功能,操作比较简单,但是使用php执行shell命令的时候总是无法push分支到远程,但是登陆服务器执行却是可以的 新建分支命令如下 git fetch -- ...
随机推荐
- smarty获取变量的两种方式
从上一篇随笔中,我们知道smarty可以通过assign()的方法注册变量,从而在前段读取变量:我们也可以从配置文件中获取变量,来具体看一下: 1.在configs文件夹中建一个test.conf文件 ...
- JAVA基础——方法笔记
java方法_学习笔记 由于我本人对java方法已经比较熟悉了,java方法的定义和使用也比较简单,这里只列举了基于我自身容易搞错的地方,希望对大家的学习有帮助!! 方法的参数可以是基本数据类型,如 ...
- Tagged Pointer
前言 在2013年9月,苹果推出了iPhone5s,与此同时,iPhone5s配备了首个采用64位架构的A7双核处理器,为了节省内存和提高执行效率,苹果提出了Tagged Pointer的概念.对于6 ...
- 2017寒假零基础学习Python系列之 印子
今日为2017年2月6日,据在慕课网上学习廖雪峰Python教程也快一周左右了,完全是零基础入门Python,大一上学期粗浅的接触学习了C语言,早就听说过Python语言的大名,又想把Python的爬 ...
- CSS3-loading动画(一)
前两天从一个网站中看到了一些比较好的loading动画效果,是用纯CSS3来写的,感觉不错,就尝试着照着效果来自己写出来. 在开始之前,先复习一个小知识:CSS3新增的关键帧动画,可以用来实现很多的动 ...
- javascript 实现 对XML文件 2级/3级联动操作
js代码 //实现对xml文档的读取:function loadXMLDoc(dname) { try // Internet Explorer { xmlDoc = new ActiveXObjec ...
- Unreal Engine 4 Radiant UI 插件入门教程(二)
本篇章前提要求:在UE4上安装了Radiant UI插件.如果没有安装,请找其它教程(或者是笔者的其它的教程,目前正在写). 本教程的目的:探讨如何从网页元素中调用蓝图中的内容: 第一步: 写一个网页 ...
- HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配)
HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配) Description The zoo have N cats and M dogs, toda ...
- 新篇章之我的java学习之路上
现在我怀着激动和兴奋的心情来写我的第一篇博客,谈谈我自己的学习java的这段历程. 我大学学的软件工程专业,学校开设过c++,数据结构,java,Android等等这类的关于开发的相关课程,但是在学校 ...
- layui中使用autocomplete.js
前言 在网站找了一大圈都是问题没有答案,记录记录谨防踩坑 layui版本:layui-v1.0.9_rls a(https://github.com/devbridge/jQuery-Autocomp ...