其他的版本控制工具我们常见的还有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. 容器环境的JVM内存设置最佳实践

    Docker和K8S的兴起,很多服务已经运行在容器环境,对于java程序,JVM设置是一个重要的环节.这里总结下我们项目里的最佳实践. Java Heap基础知识 默认情况下,jvm自动分配的heap ...

  2. 带限制的广搜 codeforces

    You are playing some computer game. One of its levels puts you in a maze consisting of n lines, each ...

  3. 19南京网络赛A 扫描线

    题目链接:https://nanti.jisuanke.com/t/41298 扫描线的简单题,题目难在找宫殿的价值(°ー°"),比赛时将近100多行代码找价值,纯模拟,看到题解哭了. 存下 ...

  4. spring boot+spring security 使用随笔

    本人最近接受的新任务是从零搭一个管理系统的权限管理模块,从零开始学习了spring security,已完成绝大部分设计和开发,和大家分享一些学习和开发心得. 首先是数据库的设计,这里是 按照产品的需 ...

  5. 异数OS-织梦师-PBFT(六) 走出区块链,加速破解PBFT

    . 异数OS-织梦师-PBFT(六) 走出区块链,加速破解PBFT 拜占庭 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区Q ...

  6. springboot 报错nested exception is java.lang.IllegalStateException: Failed to check the status of the service xxxService No provider available for the service

    spring: dubbo:#关闭所有服务的启动时检查:(没有提供者时报错) consumer: check: false timeout: 3000

  7. 做.net的成为 微软mvp 是一个目标吧。

    mvp 的评比 需要好多好多 绩效考核 比如博客排名,比如发表的文章数.

  8. 大叔 Frameworks.Entity.Core 3 Predicate

    Frameworks.Entity.Core\Commons\Predicate\ 1LinqEntity.cs /// IQueryable扩展方法:条件过滤与排序功能    /// Modify ...

  9. Spring框架学习笔记(8)——spring boot+mybatis plus+mysql项目环境搭建

    之前写的那篇Spring框架学习笔记(5)--Spring Boot创建与使用,发现有多小细节没有提及,,正好现在又学习了mybatis plus这款框架,打算重新整理一遍,并将细节说清楚 1.通过I ...

  10. Nginx配置及负载均衡

    转载:http://www.cnblogs.com/jingmoxukong/p/5945200.html nginx简易教程   目录 Nginx  概述  安装与使用  nginx 配置实战  参 ...