其他的版本控制工具我们常见的还有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 push命令后,会推送到远程仓库。

三个区域的功能:

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

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

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

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

Cyan_Con  初写blog,请多多指教!

2020-02-23 22:19:57

    

      

Git浅谈随笔之---如何工作的更多相关文章

  1. 浅谈dedecms模板引擎工作原理及其自定义标签

    浅谈dedecms模板引擎工作原理: 理解织梦模板引擎有什么意思? 可以更好地自定义标签.更多在于了解织梦系统,理解模板引擎是理解织梦工作原理的第一步. 理解织梦会使我们写PHP代码是更顺手,同时能学 ...

  2. git浅谈

    我们为什么要使用git 应用场景分析 1.使用svn,已经开发完一个需求,正在开发第二个需求,但是测试需要你立刻将你完成的第一个需求提交,请问现在你该怎么做: svn的解决方法大概是这样的:打开提交视 ...

  3. 浅谈 linux 例行性工作 crontab (linux定时任务)

    定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起. 今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好.大家就将就看吧, 首先 简单介绍一下linux 例行性工 ...

  4. (转)浅谈dedecms模板引擎工作原理及自定义标签

    理解织梦模板引擎有什么意义?一方面可以更好地自定义标签.更多在于了解织梦系统,理解模板引擎是理解织梦工作原理的第一步.理解织梦会使我们写php代码时更顺手,同时能学习一些php代码的组织方式. 这似乎 ...

  5. 浅谈malloc()和free()工作原理

    编程之路刚刚开始,错误难免,希望大家能够指出.  malloc()和free()是我经常需要用到的函数,一般情况下,C程序使用malloc()在堆上分配内存,free()释放内存,两者的参数和返回值就 ...

  6. 浅谈JSONP 的本质工作原理

    json 是一种数据格式jsonp 是一种数据调用的方式. 你可以简单的理解为 带callback的json就是jsonp 话说我们访问一个页面的时候 需要像另一个网站获取部分信息, 这就是所谓的跨域 ...

  7. 浅谈GIT

    浅谈GIT: 牛老师提出的git,于我而言,是一个陌生和新鲜的词汇,在此之前我从未听过git,按照老师的要求,我去搜索了关于git的介绍,有些看懂了,但大部分还是不懂得,在介绍中我了解git其实之前使 ...

  8. 开发工具--浅谈Git

    工具|浅谈Git Git这个工具,是我一直想写文章,终于我实现了我的想法.在我开始写之前,发表一下自己的看法,git只是一个工具,既然已经认定是一个工具,那么一定具备工具这类的共同特征,请用面向对象的 ...

  9. TODO:浅谈pm2基本工作原理

    TODO:浅谈pm2基本工作原理 要谈Node.js pm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系. 撒旦(Satan),主要指<圣经>中的堕天使(也称堕天使撒旦 ...

随机推荐

  1. 网络流入门题目 - bzoj 1001

    现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: 左上角点 ...

  2. [bzoj4417] [洛谷P3990] [Shoi2013] 超级跳马

    Description 现有一个n行m列的棋盘,一只马欲从棋盘的左上角跳到右下角.每一步它向右跳奇数列,且跳到本行或相邻行.跳越期间,马不能离开棋盘.例如,当n = 3, m = 10时,下图是一种可 ...

  3. Ogre 的Node 位移、旋转

    位移旋转有三种方式TS_LOCAL,TS_PARENT,TS_WORLD. TS_LOCAL是指自身坐标系,TS_PARENT是父节点坐标系,TS_WORLD是世界坐标系 比如  translate( ...

  4. GCC编译Win图形程序不显示控制台方法

    用VS编译openCV这些有控制台又有图形显示的程序,如果想隐藏控制台,只需要使用一行代码: #pragma comment( linker, "/subsystem:/"wind ...

  5. SpringMVC 中的异常处理

    目录 1.搭建编码分析 2.编写异常类 3.编写自定义异常处理器 4.在springmvc.xml中配置异常处理器 5.编写Error.jsp.index.jsp页面 6.编写collector代码模 ...

  6. JavaScript 注意

    字符串常用方法: 除.length外 都要加括号  trimLeft   trimRight      L和R要大写. .charAt 类似索引,超出范围为空 ,注意 (At)大小写. 注意 1.st ...

  7. linux 内存使用分析

      查看当前内存使用情况,最常用的指令就是 [root@t ~]# free -m total used free shared buffers cached Mem: -/+ buffers/cac ...

  8. mint ui的tabBar监听路由变化实现tabBar切换

    说明 最近学习vue,使用了mint ui的tabBar,感觉好难受,结合 tab-container使用更难受,因为它不是根据路由来切换页面的.mui与它基本相反,因此它能根据搜索栏的路由变化,相应 ...

  9. vscode 调试 react 项目

    主要分为以下三个步骤 安装 debug for chrome 配置 launch.json 文件 配置内容如下 { "version": "0.2.0", &q ...

  10. Spring的aop思想

    1.AOP思想 (1)在解决中文乱码的应用: 一般情况下如果在Servlet中要解决中文乱码问题需要在每一个Servlet中书写解决乱码的代码,但是,在运用了过滤器之后,就不再需要每一个Servlet ...