Git简介及安装
一 Git简介
Git是目前世界上最先进的的分布式版本控制系统。Git由Linux系统的创始人Linus开发,底层使用C语言实现。
二 Git特点
2.1 分布式与集中式
2.1.1 分布式版本控制系统
分布式版本控制系统( Distributed Version Control System, DVCS )会把服务器上的代码仓库完整地镜像下来。每个参与协同工作的电脑上都有一份完整的服务器代码仓库的镜像,任何一处协同工作用的服务器发生故障,都可以用个人的电脑上的本地仓库恢复。
2.1.2 集中式版本控制系统
集中化的版本控制系统( Centralized Version Control Systems, CVCS )。如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
集中式版本控制系统最害怕的是出现中央服务器的单点故障。如果中央服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。如果中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,而被客户端偶然提取出来的保存在本地的某些快照数据就成了恢复数据的希望。但这样的话依然是个问题,你不能保证所有的数据都已经有人事先完整提取出来过。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
2.2 版本存储方式
Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。这类系统(CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,在每个版本中记录着各个文件的具体差异。
Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。Git 的工作方式为直接记录快照,而非差异比较,Git 保存每次更新时的文件快照。
Git每个版本都是完整的项目。
2.3 本地执行操作(大部分)
在 Git 中的绝大多数操作都只需要访问本地文件和资源,不用连网。但如果用 CVCS(集中式) 的话,大部分操作都需要连接网络。因为 Git 在本地磁盘上就保存着所有当前项目的历史更新,所以处理起来速度飞快。
如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上去取数据回来,而直接从本地数据库读取后展示给你看。所以任何时候你都可以马上翻阅,无需等待。如果想要看当前版本的文件和一个月前的版本之间有何差异,Git 会取出一个月前的快照和当前文件作一次差异运算,而不用请求远程服务器来做这件事,或是把老版本的文件拉到本地来作比较。
以 Perforce为例(集中式),如果不连到服务器,几乎什么都做不了(默认无法发出命令 p4 edit file 开始编辑文件,因为 Perforce 需要联网通知系统声明该文件正在被谁修订。但实际上手工修改文件权限可以绕过这个限制,只是完成后还是无法提交更新。);如果是 Subversion 或 CVS,虽然可以编辑文件,但无法提交更新,因为数据库在网络上。
三 Git安装
Git支持Linux、Windows和Mac系统,安装Git,可以到Git官方网站直接下载安装程序。
选择对应的操作系统(此处选择Windows),
点击后会自动下载最新版的Git的安装程序。
双击打开后,会出现如下页面,点击Next;
各选项意思如下图,根据需求进行勾选(如果勾选倒数第二个选项,需要下载 Windows Terminal 配合 Git Bash使用);
勾选完成后点击Next;
根据需求勾选后,点击Next;
勾选1为使用 Git 自带的 OpenSSH,勾选2为使用系统上的外部 OpenSSH
点击Next;
注:再次安装Git后,会默认卸载之前安装的Git.
安装完成后,右击鼠标,点击“显示更多选项”,会出现两个选项,安装完成,若不出现,可能是没有默认装在C盘,此时需要自己去配置。
针对上述情况,点击“win+R”,输入“regedit”,回车;
打开计算机\HKEY_CLASSES_ROOT\Directory\Background\shell文件夹
若无shell目录就新建一个,有的话就点击shell上右击,新建项,取名Git Bash Here(鼠标右击显示的名字),选择新建的项,重复上述操作,取名command;
按下图进行操作;
此时右击就会出现Gti Bash Here。
四 Git仓库
版本库又名仓库,英文名repository,可以理解为一个目录,这个目录里面的所有文件都可以被Git管理,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻将文件“还原”。
4.1 基本概念
远程仓库(Remote):
也叫作资源库,是远程机器上的代码库,用于做不同版本库文件交换更新。如Gitlab,GitHub,gitee。
本地库(Repository):
是用户在本地创建的目录,拥有远程库的一个快照,由工作区和版本库构成。
工作区(Workspace):
本地库的根目录中除.git目录以外的内容,存储内容的实际文件。
暂存区(stage/Index):
也叫做缓存区,暂存信息存放在.git目录"下的index文件(.git/index)中,用于临时保存内容的修改;
版本库(.git目录)
是本地库的根目录中的一个隐藏目录.git,用于记录版本信息,Git进行版本控制所需要的文件,则都放在.git文件夹中;
分支(Branch):
本地库中默认创建一个主(master)分支,分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
4.1.1 本地库和远程库的关系
开发人员通过Git命令来管理代码,最常用的6个命令如下图所示:
4.2 Git开发流程
- 克隆远程库:从远程库上克隆完整的Git仓库到本地(包括代码和版本信息);
- 在本地库上修改代码:在本地库上根据不同的开发目的,创建分支,修改代码;
- 提交到分支:在本地分支上提交代码;
- 把修改合并到本地主分支:在本地库上提交更新,即把修改合并到本地主分支;
- 把远程库合并到本地主分支:把远程库上的最新代码fetch下来,跟本地主分支合并,如果存在冲突,那么解决冲突。
- 把本地主分支提交到远程库:生成补丁(patch),把补丁发送给远程库。