Git版本管理之旅(一)—— Git简介及架构浅析
来源:互联网 发布:jquery.min.js的作用 编辑:程序博客网 时间:2024/06/05 17:05
- 背景与诞生
- 功能
- 架构
- 安装
参考资料:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
http://blog.jobbole.com/25775/
背景与诞生
1991年,Linus创建了开源的Linux;
2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!
Q:为什么把Linux代码放到类似CVS、SVN版本控制系统里呢?
A:这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。
2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,更加不利于社区发展,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
2005年,社区成员试图破解BitKeeper的协议,被BitMover公司发现了,于是BitMover公司怒了,要收回Linux社区的免费使用权。
两周后,Linus自己用C写了一个分布式版本控制系统——Git!
一个月之后,Linux系统的源码已经由Git管理了!Git迅速成为最流行的分布式版本控制系统。
2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
功能
- 版本记录与恢复
版本不同是因为文件都会被修改,被各种不同的人修改;最简单的版本是我们通过复制粘贴,根据时间重命名来保存各个版本。但是当我们需要恢复到某一个时间点的数据或者需要合并某两个甚至某几个时间点的数据的时候,显然这种简单的版本是无法满足的。
为了满足人们对各个版本记录以及恢复的需求,产生了版本控制这样的系统。 - 共享数据
很多时候,我们的办公地点在变化,办公工具在变化。甚至办公人员从1个变成n个,通过u盘或者邮件的方式可以共享,但是显然不够便捷。将文件进行共享,从服务器pull文件,修改之后push修改之后的文件到服务器。所有人都可以共享。 - 追踪修改信息和责任人
文件共享之后,那么也将面临一系列的问题。不同人员修改的文件,不同版本的文件,需要如何去merge?需要如何去解决冲突?我们需要知道文件的版本树结构,需要知道所有版本的修改信息以及修改人信息。
架构
- 本地版本控制系统
见思维导图 - 集中式版本控制系统
见思维导图 分布式版本控制系统
博主将Git作为一种版本控制系统的工具,只是简单介绍不做深入的分析
客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。服务起发生故障都可以从本地节点恢复数据。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。
文件在保存到 Git 时,数据都要使用 SHA-1 算法进行内容的校验和(checksum)计算,得到一个 SHA-1 哈希值,作为指纹字符串。该字串由 40 个十六进制字符(0-9 及 a-f)组成,并将此结果作为数据的唯一标识和索引。通过唯一标志判断文件的完整性以及是否变更。所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。
Git 不保存这些前后变化的差异数据,而是把变化的文件作快照后,记录在文件系统中。每次提交更新时,遍历所有文件的信息并对文件作快照,然后保存一个指向这次快照的索引。若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。
文件在Git中有三种状态
- 已提交(committed)
-表示该文件已经被安全地保存在本地数据库中 - 已修改(modified)
-表示修改了某个文件,但还没有提交保存 - 已暂存(staged)
-表示把已修改的文件放在下次提交时要保存的清单中
每个项目都有一个 Git 目录,它是 Git 用来保存元数据和对象数据库的地方。每次克隆镜像仓库的时候,就是这个目录里面的数据。
从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从 Git 目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。
所谓的暂存区域只不过是个简单的文件,一般都放在 Git 目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。
安装
基于Ubuntu的安装教程
在Github网站注册帐号,创建工程 test 进入工程,右下角会有一个项目仓库的地址。
Linux下 安装github
sudo apt-get install git git-core git-doc创建rsa公钥
ssh-keygen -t rsa -C “your_email@youremail.com”
整个过程中有一个需要填密码
然后后进入~/.ssh目录 找到公钥id_rsa.pub
记事本打开复制文字
进入github.com中的的设置,找到pubkey选项,填入公钥设置账户信息
git config –global user.name “xxx”
git config –global user.email xxx@xxx.com
- Git版本管理之旅(一)—— Git简介及架构浅析
- Git版本管理之旅(二)—— Git基本操作流程及相关命令
- Git的学习笔记(一)——初识Git及版本库的管理
- GIT教程 — 浅析分支管理(一)
- Git版本管理之旅(三)—— Git分支策略与管理
- git版本管理架构
- git 版本管理(一)
- git flow版本管理简介
- Git(一):Git与版本控制简介
- Git(一):Git与版本控制简介 .
- CICD—版本管理 Git
- GIT版本控制 — 简介与安装 (一)
- Git系列一——Git简介
- Git教程学习(一)—Git简介
- 版本控制系统Git(一)——版本控制系统简介
- 版本管理:Git 使用起步(一)
- git的版本管理使用(一)-初识git
- git学习之旅(一)——git开始
- Android基础中四种点击事件的实现及接口回调
- SpringMVC传入参数
- Spark ML 分布式机器学习(二):pipeline
- 基于jQuery建立前端消息框架
- 一、MySQL主从同步(binlog方式)
- Git版本管理之旅(一)—— Git简介及架构浅析
- 2007年大学生电子设计大赛国赛电源类题目设计报告
- 二、MySQL主从切换
- [BZOJ]4547: Hdu5171 小奇的集合 矩阵乘法
- android自动化测试Uiautomator源码分析之一
- [BZOJ 4813][Cqoi2017]小Q的棋盘:TreeDP
- MySQL之GTID简介
- swustojRenting Boats(0574)
- 删除元素