如何选择版本控制系统之二---Git的研发应用场景

以前写了一篇《如何选择版本控制系统 ---为何选择Git版本控制系统》,地址是:juejin.im/post/592677…,有兴趣的能够去看看,本篇文章算是这个系列的第二篇文章。git


Git诞生于2002年,由Linux之父Linus Torvalds和他的团队开发并不断完善,它秉承了Linux的开源精神,为广大研发团队带来了很是棒的版本控制体验。本文立足Git的工做原理,深刻探讨各类研发场景中工做流等问题。缓存

Git工做模式网络

代码提交过程工具

一次修改被成功提交到远端仓库会历经四个阶段,1本地工做区->2缓存区->3版本库->4远端版本库,经过执行相应的Git命令,文件在这四个区域跳转,并呈现不一样的状态:post

1.已修改(modified):包括三种文件,新增文件,被修改的文件,被删除的文件测试

2.已暂存(staged):对已修改的文件执行git add或git rm操做,文件就变成已暂存状态,进入暂存区。暂存区实际上就是一个文件索引目录树,记录了全部文件名、文件状态信息,它已索引的方式创建了文件名和文件内容(在对象库.git/objects中保存)的对应关系。网站

3.已提交(committed):对已暂存的文件执行git commit操做,文件就变成已提交状态,进入本地版本仓库。设计

4.已上传:对已提交的文件执行git push操做,文件就变成已上传状态,进入远端版本仓库。3d


Git如何记录每次提交版本控制

咱们思考一下,版本控制系统应该如何记录每次提交呢?正常的思惟确定是记录“差别”(delta),也就是先后两个版本中文件内容的不一样,确实大多数版本控制系统是这么作的,好比咱们所熟悉的CVS,SVN。可是,Git却不这样!每次提交更新时,Git会对所有文件做一个快照(snapshot),并保存指向此次快照的索引。

这种保存方式带来不少好处,切换版本时,直接引用指向目标版本的索引便可,不须要像差别存储那样,须要版本之间的merge,速度会快不少,更重要的是,为后文所讲到的轻量级分支切换提供了前提条件。


Git分支

Git新建分支的本质就是建立一个指向最后一次提交的可变指针,因此,Git分支的建立不是复制版本库的内容,仅仅是新建了一个指针,它以40个字符长度SHA-1字串形式保存在文件中,这不可思议的轻量级就是源于“快照”保存的版本设计理念。


Git工做流

什么是Git工做流?你能够理解为代码管理的分支策略。这里从典型的GitFlow工做流出发,配合我正在使用的代码托管平台(华为软件开发云),给你们详细讲解工做流是如何服务于项目流程管理和团队协同开发。

Ømaster:主线分支,版本有较强稳定性,供生产环境部署使用,这个分支只能从其它分支合并,不能在这个分支上直接提交修改。

新建分支:

在开发云界面输入新分支名,并选择从哪一个分支检出便可。


Ødevelop:主开发分支,用来集成测试最新合入的开发成果,包含要发布到下一个Release的代码。

Øfeature:特性分支,每一个特性一个分支,用于开发人员提交代码并进行自测。一旦开发完成,咱们合并回Develop分支进入下一个Release。

Øhotfix:补丁分支,生产环境发现新Bug时建立的临时分支,问题验证后,合并到Master和Develop分支,因此Hotfix的改动会进入下一个Release

Ørelease:发布分支,发布新版本时,基于Develop分支建立,发布完成后,合并到master和develop分支。

各个分支之间的关系能够从开发云的“仓库网络”中查看:


优势:项目管理流程明确

缺点:相对复杂,须要同时维护两个长期分支,不适合网站项目。

分支合并

不管哪一种工做流都会涉及到分支合并(把一个分支中的修改整合到当前分支),主要有两种方法:三方合并(merge)和衍合(rebase)。咱们经过对同一种场景进行不一样操做体会两种合并方法的区别。

场景:master分支新增了C4节点,hotfix分支新增了C3节点,现将hotfix分支合并到master分支:

1.三方包括hotfix新增节点C3,master新增节点C4,以及二者的共同祖先节点C2。这种合并操做简单,但新增合并节点C5,造成了环形,版本记录可读性差。

a)PC端命令操做方式:

#git checkout master

#git merge hotfix

b)开发云平台页面操做:

第一步:


第二步:


2.衍合先将master分支新增节点C4以补丁形式保存在.git/rebase目录中,而后同步hotfix分支最新代码,再应用补丁C4’。

#git checkout master

#git rebase hotfix


冲突解决

类型一:两个合并分支修改了同一行代码


解决方法:

1.分析哪一种修改方法正确,手动合并;

2.提交修改。

类型二:文件被重命名为不一样的名字

解决方法:

1.确认哪一个名字是正确的,删除错误的;

2.提交修改。

结语

根据实际研发场景制定合理的工做流,能有效提升项目管理水平和团队协同开发能力,而这些分支操做,对于不习惯使用命令的人来讲,能够在PC端下载使用图形化工具tortoisegit,也能够在代码托管平台华为软件开发云(www.hwclouds.com/devcloud/)配置管理服务使用页面操做。下篇文章会详细讲解代码托管平台可视化操做方法。

相关文章
相关标签/搜索