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

author author     2022-09-01     623

关键词:

之前写了一篇《如何选择版本控制系统 ---为什么选择Git版本控制系统》,地址是:http://laoyudage.blog.51cto.com/12854334/1927409,有兴趣的可以去看看,本篇文章算是这个系列的第二篇文章。

技术分享

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

Git工作模式

代码提交过程

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

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

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

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

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

技术分享

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,也可以在代码托管平台华为软件开发云(https://www.hwclouds.com/devcloud/)配置管理服务使用页面操作。下篇文章会详细讲解代码托管平台可视化操作方法。


如何选择版本控制系统之三

往期文章:《如何选择版本控制系统---为什么选择Git版本控制系统》《如何选择版本控制系统之二---Git的研发应用场景》跨地域开发的需求其实由来已久,并在IT/互联网高速发展的今天越来越普遍,这正是Git版本管理广泛流程的... 查看详情

如何选择版本控制系统之二

之前写了一篇《如何选择版本控制系统---为什么选择Git版本控制系统》,地址是:http://www.cnblogs.com/goldenfish/p/6876864.html,有兴趣的可以去看看,本篇文章算是这个系列的第二篇文章。 Git诞生于2002年,由Linux之父LinusTorvalds和... 查看详情

如何选择版本控制系统之三---代码托管操作

往期文章:《如何选择版本控制系统---为什么选择Git版本控制系统》《如何选择版本控制系统之二---Git的研发应用场景》跨地域开发的需求其实由来已久,并在IT/互联网高速发展的今天越来越普遍,这正是Git版本管理广泛流程的... 查看详情

如何选择版本控制系统---为什么选择git版本控制系统

版本控制系统“代码”作为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决bug的新patch,这就需要有一款系统,能够存储、追踪文件的修改历史,记录多个版本的开发和维护。于是,版本控制系统(Vers... 查看详情

git的基本使用及应用场景

  一、什么是GIT?  Git是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。  GitHub、GitCafe、BitBucket和GitLab等是基于Git版本控制的远程文件托管平台。  使用场景:无远程:在本地.... 查看详情

如何选择版本控制系统

版本控制系统“代码”作为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决bug的新patch,这就需要有一款系统,能够存储、追踪文件的修改历史,记录多个版本的开发和维护。于是,版本控制系统(Vers... 查看详情

linux系统各个版本具体应用场景!

...行业中,当我们进入行业确定好自己发展路线之后,就是选择一个合适的Linux版本,但是对于很多人都是比较头疼的问题,Linux各个版本应用在哪些场景?为大家介绍一下。  如果你是一个Linux爱好者,想要选择一个桌面系统,... 查看详情

版本控制git之二-分支(代码片段)

...必杀技特性’‘,也正因为这一特性,使得Git从众多版本控制系统中脱颖而出。为何Git的分支模型如此出众呢?Git处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作... 查看详情

如何在 Unity 中使用 git/版本控制 [重复]

】如何在Unity中使用git/版本控制[重复]【英文标题】:Howtousegit/versioncontrolwithUnity[duplicate]【发布时间】:2017-09-0717:46:39【问题描述】:Unity和git的正确用法是什么?如果我推送我对场景和项目所做的更改,然后其他团队成员提取... 查看详情

一小时精通svn版本控制之二服务端的安装和配置

服务端的安装:  保持默认,单选框这里选择第一项,如果选择第二项就没有可视化界面了。复选框勾选上,否则不能用命令行。这里选择标准版standardEdition是免费的,下面的企业版是收费的。Location这里选择安装路径,r... 查看详情

git详细教程

分布式版本控制系统--git一.什么是Git1.Git是什么Git是目前世界上最先进的分布式版本控制系统(没有之一)。实际上版本控制系统有如下几个:1)CVS2) SVN3)Git这个概念中有两个疑问:1.什么是版本控制2.什么是分布式?2.为什么... 查看详情

华为云实战开发5.如何快速创建免费git代码仓库华为云技术分享

...应用Git,以及更好的将Git与DevCloud结合应用。2概述2.1版本控制系统介绍从狭义上来说,版本控制系统是软件项目开发过程中管理代码所有修订版本的软件,能够存储、追踪文件的修改历史,记录多个版本的开发和维护,事实上我... 查看详情

linux各个版本应用在哪些场景?你都了解吗?

...行业中,当我们进入行业确定好自己发展路线之后,就是选择一个合适的Linux版本,但是对于很多人都是比较头疼的问题,Linux各个版本应用在哪些场景?为大家介绍一下。  如果你是一个Linux爱好者,想要选择一个桌面系统,... 查看详情

windows系统中如何安装git版本控制工具

...统中进行软件编写时,经常会用到Git版本控制工具。那么如何在Windows系统中安装Git呢?下面我给大家分享一下。工具/材料Git安装包01首先点击Git安装程序,默认进入安装向导界面,第一个页面没有什么需要注意的,直接点击Next... 查看详情

2.9git(代码片段)

一个分布式版本控制系统,和SVN类似,但远比SVN强大的一个版本控制系统①Git可以方便的在本地进行版本管理,如同你本地有一个版本管理服务器一样我们可以选择在合适的时间将本地版本推送到统一的版本管理服务器②Git每次... 查看详情

git讲解

一、什么是Git:Git是目前世界上最先进的分布式版本控制系统。二、为什么要用版本控制系统:1、更方便的存储版本2、恢复之前的版本3、更方便的进行对比4、协同合作三、如何安装GIT:1、git下载官网:https://git-scm.com2、点击DOWNLO... 查看详情

双态运维分享之二:服务型cmdb的消费场景

...本却一直是建设者们的痛点。那么今天,我们来探讨一下如何通过消费来持续驱动CMDB的逐步完善。消费驱动是指依托用户消费的收益,吸引研发者、销售者,逐步围绕该产业开展建设并延伸拓展其发展范畴。举例来说,网购的... 查看详情

git的使用

...GitLab等)。Git下载安装下载Git,官网地址:https://git-scm.com/选择使用命令行环境,选择第二个选项,点击“Next”Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录... 查看详情