简介
Git 是目前世界上最优秀的分布式版本控制系统。版本控制系统是能够随着时间的推进记录一系列文件的变化以便于你以后想要的退回到某个版本的系统。版本控制系统分为三大类:本地版本控制系统,集中式版本控制系统和分布式版本控制系统
git是目前世界上最先进的分布式版本控制系统(免费
版本控制分类
-
本地版本控制
本地版本控制(Local Version Control Systems)是将文件的各个版本以一定的数据格式存储在本地的磁盘(有的VCS 是保存文件的变化补丁,即在文件内容变化时计算出差量保存起来),这种方式在一定程度上解决了手动复制粘贴的问题,但无法解决多人协作的问题。
-
集中版本控制
(Centralized Version Control Systems)相比本地版本控制没有什么本质的变化,只是多了个一个中央服务器,各个版本的数据库存储在中央服务器,管理员可以控制开发人员的权限,而开发人员也可以从中央服务器拉取数据。集中式版本控制虽然解决了团队协作问题,但缺点也很明显:所有数据存储在中央服务器,服务器一旦宕机或者磁盘损坏,会造成不可估量的损失。
-
分布式版本控制(git)
每个人拥有全部代码
与前两者均不同。首先,在分布式版本控制系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等,系统保存的的不是文件变化的差量,而是文件的快照,即把文件的整体复制下来保存,而不关心具体的变化内容。其次,最重要的是分布式版本控制系统是分布式的,当你从中央服务器拷贝下来代码时,你拷贝的是一个完整的版本库,包括历史纪录,提交记录等,这样即使某一台机器宕机也能找到文件的完整备份。
Git每一次提交都是对项目文件的一个完整拷贝,因此你可以完全恢复到以前的任一个提交而不会发生任何区别。
Git 安装(傻瓜式即可)
git必要配置
-
查看git配置信息:
git config -l
-
查看系统配置信息:
git config - - system - - list
-
查看本地信息
-
系统级:Git\etc\gitconfig
- global 全局 :C:\Users\kuai.gitconfig (必须设置,不然以后部署不了项目)
至此环境搭建完成
基础理论
Git工程有三个工作区域:==工作目录,暂存区域,以及本地仓库。==工作目录是你当前进行工作的区域;暂存区域是你运行git add
命令后文件保存的区域,也是下次提交将要保存的文件(注意:Git 提交实际读取的是暂存区域的内容,而与工作区域的文件无关,这也是当你修改了文件之后,如果没有添加git add
到暂存区域,并不会保存到版本库的原因);本地仓库就是版本库,记录了你工程某次提交的完整状态和内容,这意味着你的数据永远不会丢失。
相应的,文件也有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地版本库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中,即暂存区域。所以使用Git的基本工作流程就是:
- 在工作区域增加,删除或者修改文件。
- 运行
git add
,将文件快照保存到暂存区域。 - 提交更新,将文件永久版保存到版本库中。
SHA-1 校验和
Git 是一套内容寻址文件系统。意思就是Git 从核心上来看不过是简单地存储键值对(key-value
),value
是文件的内容,而key
是文件内容与文件头信息的 40个字符长度的 SHA-1 校验和,例如:5453545dccD33565a585ffe5f53fda3e067b84d8
。Git使用该校验和不是为了加密,而是为了数据的完整性,它可以保证,在很多年后,你重新checkout某个commit时,一定是它多年前的当时的状态,完全一摸一样。当你对文件进行了哪怕一丁点儿的修改,也会计算出完全不同的 SHA-1 校验和,这种现象叫做“雪崩效应”
Git引用
现在再来看引用,就会很简单了。如果我们想要看某个提交记录之前的完整历史,就必须记住这个提交ID,但提交ID是一个40位的 SHA-1 校验和,难记。所以引用就是SHA-1 校验和的别名,存储在.git/refs
文件夹中。
Git分支
分支
分支是Git的杀手级特征,而且Git鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系。因为Git分支非常轻量级,不像其他的版本控制,创建分支意味着要把项目完整的拷贝一份,而Git创建分支是在瞬间完成的,而与你工程的复杂程度无关。
因为在上文中已经说到,Git保存文件的最基本的对象是blob
对象,Git本质上只是一棵巨大的文件树,树的每一个节点就是blob
对象,而分支只是树的一个分叉。说白了,分支就是一个有名字的引用,它包含一个提交对象的的40位校验和,所以创建分支就是向一个文件写入 41 个字节(外加一个换行符)那么简单,所以自然就快了,而且与项目的复杂程度无关。
Git的默认分支是master,存储在.git\refs\heads\master
文件中,假设你在master分支运行git branch dev
创建了一个名字为dev
的分支,那么git所做的实际操作是:
- 在
.git\refs\heads
文件夹下新建一个文件名为dev
(没有扩展名)的文本文件。 - 将HEAD指向的当前分支(当前为
master
)的40位SHA-1 校验和外加一个换行符写入dev
文件。
总结
1、Git保存文件的完整内容,不保存差量变化。
2、Git以储键值对(key-value
)的方式保存文件。
3、每一个文件,相同文件的不同版本,都有一个唯一的40位的 SHA-1 校验和与之对应。
4、SHA-1 校验和是文件的指针,Git依靠它来区分文件。
5、每一个文件都会在Git的版本库里生成blob
对象来保存。
6、对于没有变化的文件,Git只会保留上一个版本的指针。
7、Git实际上是通过维持复杂的文件树来实现版本控制的。
8、使用Git的工作流程基本就是就是文件在三个工作区域之间的流动。
9、应该大量使用分支进行团队协作。
10、分支只是对提交对象的一个引用。
Git 常用命令
git init 初始化本地仓库
git status 查看文件状态
git clone [url] 克隆远程仓库
git add . 添加当前文件夹下的所有问文件到缓存
git commit -m "描述信息" 从缓存提交数据到本地仓库
git log 显示日志信息
git config --system --list 显示系统信息
git config --global --list 显示用户配置信息
创建本地仓库的两种方法
-
创建全新的本地仓库
-
在当前目录下创建一个Git代码仓库
使用命令:
git init
-
-
克隆远程仓库(去gitee 或者GitHub试试)本实例用gitee
- 使用命令:
git clone [url] https://gitee.com/kuangstudy/openclass.git
- 使用命令: