Git浅谈随笔之---如何工作

  其他的版本控制工具我们常见的还有SVN,关于这两者的区别,我们不多谈,详见 Git 与 SVN 的区别 ;

  Git是一种版本控制工具。用来记录文件内容的变化,备以后查阅某个版本的情况的系统;我们在Git中存放的一般是文本代码、少量的图片或者多媒体资源,但是事实上Git可以用来存放任何类型的文件。 Git官网对版本控制的说明有一段话,我直接粘贴过来:

  如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。 使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。

  阅读以上文字可见,版本控制的好处,不仅可以对比,还可以记录你每个版本的状态。可以备份资源,多人协作的时候还可以对每个人的修改内容进行查看,甚至你删除文件之后,只要纳入Git的跟踪范围,后续还可以恢复那些文件。还有需要巧妙的用法,这个看个人习惯。由此可见,对Git有一个比较全面的了解和熟练的使用,将会极令工作或者生活变得有序。(有点跑偏了,回到正题)

  对待数据:Git在对待我们跟踪的数据的时候,是通过保存数据快照的方式来完成的,每次我们提交的时候,Git都会对所有跟踪(track)的文件制作一个快照并为这些文件指定一个索引(也就是SHA-1值),之后保存这个索引。如果在此次提交中,有些文件没有改变,那么这些不变的文件就不会生成新的快照,自然也就不会有新的索引,而是依然保存文件上次变动的SHA-1值

  网络依赖性: Git允许我们离线进行操作,跟踪(track)我们需要的文件、提交更新、新建或者切换分支,每一个克隆项目的人的机子里都有这个项目所有协同工作者的所有提交记录,所以可以在本地进行几乎所有的操作,虽然这个时候可能会有些滞后。

  保证完整性:由于我们通过Git保存数据,所以在提交的时候,Git都会发现我们的信息是否完整,通过SHA-1值来计算校验。Git里的SHA-1值是长度为40位的十六进制(0-9, a-f)符号组成的字符串,例如: 23fd98ca1a23fd98ca1a23fd98ca1a23fd98ca1a,这种SHA-1值非常多,包括保存文件(blob)快照、保存commit数据、保存tree数据和保存tag数据。Git从不是通过文件名称来保存的,都是通过这种SHA-1值来完成的。

  三个状态:在Git中,我们的文件有三种状态: 已修改(modified)、已暂存(staged)、已提交(commited)。已修改表示这个文件被修改,但是没有暂存,如果这个文件是新增的,那么文件是一个未跟踪(untracked)的状态。已暂存,表示这个文件已经生成快照并且记录起来,在下一次提交的时候会提交。已提交表示数据已经到达Git的数据库中。如果一个项目是Git项目,那么会有三种区域:

Git浅谈随笔之---如何工作

这个图我直接贴上来了,工作区、暂存区、历史区(也叫本地仓库),如果我们有远程仓库,通过git push命令后,会推送到远程仓库。

三个区域的功能:

工作区:通过Git提取某个版本的内容后,会看到这个版本的所有内容,我们工作的时候就是在这个区域修改的

暂存区:当我们把新增的或者修改的文件添加之后,首先会放到暂存区。刚刚说过,Git是通过保存文件快照并为文件指定一个索引来工作的,所以暂存区存放的都是索引的信息

历史区:存放Git所有的元数据和对象数据

工作区(修改文件) ---- add ----> 暂存区 ---- commit ----> 历史区;

Cyan_Con  初写blog,请多多指教!

2020-02-23 22:19:57

    

      

上一篇:浅谈malloc()与free()


下一篇:python面向对象的特点,类定义等,私有属性、公有属性、成员属性