如GitSVN这类版本控制工具的原理是什么?
Git是Linus之父 Torvalds 为了管理 Linux 内核代码设计而开发的一个开源的版本控制系统。
Linux核心的开发迭代是由众多分散的程序员完成。当时大家常用的代码管理工具BitKeeper,因为不开源,引起我们的linux大佬强烈的不满,但又赞许BitKeeper的优于其他工具的分布式架构,索性Torvalds自己开发了代码管理工具,就是GIT。听说从无到实战部署只花了10天时间。
而GIT与Svn最核心的区别就是GIT是分布式架构平台。而相对于Svn只是一个单纯的文件版本管理系统而言,GIT更是一个内容管理平台,版本控制甚至只是一个次属功能。
我们了解GIT的结构就大致知道其工作原理。git分3个数据存储区:
工作区:存放项目文件。
暂存区:临时存放的改动数据,即将提交到仓库。
git仓库:最后存放文件版本的仓库。
工作原理及主要操作命令:
对工作区修改(或新增)- git add 。暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到一个新对象,而该对象的ID被记录在暂存区的文件索引中。
执行提交操作 - git commit。暂存区的目录树写到版本库中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
重置暂存区 - git reset HEAD。暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
删除暂存区 - git rm --cached 。会直接从暂存区删除文件,工作区则不做出改变。
暂存区文件覆盖工作区 - git checkout 。会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
版本master分支文件覆盖暂存区和工作区 - git checkout HEAD ,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令极具危险性:因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
至于svn,目前我用的极少,操作比git 简单,两者区别:
GIT是分布式的,SVN只有一个中央版本库。 GIT把内容按元数据方式存储,而SVN是按文件方式。 Git下载下来后,在OffLine状态下可以看到所有的Log,SVN不可以。 GIT没有一个全局的版本号,而SVN有,此点是svn的优点。SVN只能有一个指定中央版本库。当这个中央版本库有问题时,所有工作成员会沿袭错误。而 Git可以有无限个版本库。 GIT的内容完整性要优于SVN。GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。