Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。
Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。
Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不用服务器端软件支持。
Git是目前世界上最先进的分布式版本控制系统,在处理各种项目时,都十分高效,而且非常的高大上。
集中式与分布式的区别:
-
最常见的集中式版本控制系统是SVN,版本库是集中放在中央处理器中的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器那里获取最新的版本,然后开始干活,干完活后需要把自己做的东西推送到中央服务器。而且集中式版本控制系统是必须联网才能工作的,一旦断网,所有人都将无法开展工作,可见集中式版本控制系统的局限性是比较大的。
-
Git是目前世界上最流行的分布式版本控制系统,它没有中央处理器,每个人的电脑就是一个完整的版本库,同时在工作的时候也不需要联网,因为版本都存储在自己的电脑上。我们随时都可以将自己在工作区间做的修改提交到本地仓库,最后将自己的本地版本仓库推送到远程版本仓库进行合并,效率非常高。
Git与SVN的区别:
Git | SVN | |
---|---|---|
核心区别 | 分布式 | 集中式 |
存储方式 | Git按元数据方式存储 | SVN按文件方式存储 |
分支 | 分支是Git的必杀技能,将Git从版本控制系统的家族中突显出来 | 分支在SVN中一点也不特别,其实它就是版本控制系统中的另外一个目录 |
全局版本号 | Git没有,是目前Git相较SVN缺少的最大特征 | SVN有全局版本号 |
内容完整性 | Git的内容存储使用的是SHA-1哈希算法,确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏 | 在这方面SVN的性能是低于Git的 |
安全性 | 和SVN相比,Git的每个分支都有一个完整的版本库,即使某个分支的电脑崩掉了也不要紧,可以随时从其他电脑拷贝过来 | 而SVN版本控制系统的中央服务器一旦挂掉,所有人的工作都将无法开展 |
Git的工作流程:
- 克隆Git资源作为工作目录;
- 在克隆的资源上添加或修改文件;
- 如果其他人更改,你可以更新资源;
- 在提交前查看修改状态;
- 提交修改;
- 在修改完成后,如果发现错误,可以撤回提交,并进行再次修改和提交。
Git工作区、暂存区及版本库概念:
- 工作区:自己电脑中能看到的工作目录
- 暂存区:stage或index,一般放在
.git(可隐藏文件)
目录下的index
文件(.git/index)中,所以我们有时候也把暂存区叫做索引 - 版本库:工作区中有一个可隐藏目录
.git
,这个实际上就是Git的本地版本仓库
上图中,左侧为工作区,右侧为版本库。在版本库中被标记为“index”的区域为暂存区,被标记为“master”的是master主分支,“HEAD”实际上是指向master主分支的一个游标,“objects”标识的区域为Git的对象库,实际位于.git/objects
目录下,里面包含了创建的各种对象及内容。
当工作区进行修改(或新增)的文件执行git add
命令时,暂存区的目录树将被更新,同时工作区修改(或新增)的文件内容被写入到对象库(此时的对象库可以认为是暂存区中的对象库)中的一个新的对象中,而该对象的ID被记录在暂存区中的文件索引中。
当执行git commit
提交命令时,暂存区的目录树就被提交到版本库中的对象库(objects)中,master主分支会做出相应的更新,即master指向从暂存区提交过来的目录树。
因为我们在创建Git版本库时,Git自动为我们创建了唯一的一个master分支,所以此刻执行git commit
命令就是往master
分支上提交更改。
整个过程可以简单理解为,需要提交的文件修改通通先放到暂存区,然后一次性提交暂存区的所有修改。