Git 的特点—— Git 学习笔记 02

2024-09-09 05:38
文章标签 特点 学习 02 笔记 git

本文主要是介绍Git 的特点—— Git 学习笔记 02,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Git 简史
  • Git 的特点
    • 直接记录快照,而非差异比较
    • 近乎所有操作都是本地执行
    • 保证完整性
    • 一般只添加数据
  • 参考资料

Git 简史

众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus 本人手工合并。

你也许会问,难道那时候就没有版本控制系统吗?有是有,比如 CVS、SVN. 虽然它们免费且开源,可是用起来速度太慢,且必须联网才能使用。也有一些商用的版本控制系统,虽然比 CVS、SVN 好用,可是要收费,这和 Linux 的开源精神不符。

到了 2002 年,Linux 内核已经发展了十年有余。代码库之庞大很难再让 Linus 继续通过手工方式来管理了。于是 Linus 选择了一个商业版本控制系统 BitKeeper(由 BitMover 公司开发,属于分布式版本控制系统)。出于人道主义精神,BitMover 公司授权 Linux 社区免费使用 BitKeeper.

2005 年,BitMover 公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区
免费使用 BitKeeper 的权力。这可怎么办呢?自己动手,丰衣足食。Linus 决定自行开发版本控制系统。仅用十天的时间,他就编写出了 git 的第一个版本(大神就是大神啊)。一个月以后,Linux 内核的源码已经由 git 管理了!

Git 的特点

直接记录快照,而非差异比较

git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 git 对待数据的方法。其它系统(比如 CVS、Subversion、Perforce、Bazaar 等等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。如下图所示:
在这里插入图片描述

但是 git 不按照以上方式对待或保存数据。 反之,git 更像是把数据看作是对小型文件系统的一组快照。 每次你提交更新,git 都会对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,git 不再重新存储该文件,而是用一个链接指向之前存储的文件。

git 对待数据更像是一个 快照流
(下图中虚线表示之前存储过,所以不重复存储。)
这里写图片描述

近乎所有操作都是本地执行

在 git 中的绝大多数操作都只需要访问本地文件和资源。比起所有操作都有网络延时开销的集中式版本控制系统,Git 在这方面会让你感到“迅雷不及掩耳盗铃儿响叮当”。 因为你在本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。

这也意味着在断网环境下,几乎可以进行任何操作。 比如你在飞机上对代码做了一些修改,你能愉快地提交,直到有网络连接时再上传。 换做用 Subversion 或 CVS,你只能修改文件,但不能向数据库提交修改(因为你没网)。

保证完整性

git 中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 git 不知情的情况下更改任何文件目录。若你在传送过程中丢失信息或损坏文件,Git 就能发现。

git 用以计算校验和的机制叫做 SHA-1 散列。 这是一个由 40 个十六进制字符组成的字符串,基于 git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样的:

24b9da6552252987aa493b52f8696cd6d3b00373

git 中使用这种哈希值的情况很多。实际上,git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名,也不是 Subversion 那样连续的版本号。

一般只添加数据

你执行的 git 操作,几乎只往 git 数据库中增加数据。 很难让 git 执行任何不可逆操作,或者让它以任何方式清除数据。 同别的 VCS 一样,未提交更新时有可能丢失或弄乱修改的内容;但是一旦你提交快照到 git 中,就难以再丢失数据。如果你还定期把数据推送到其他仓库,那么你的数据就更难弄丢了。


参考资料

[1] https://git-scm.com/book/zh/v2/起步-Git-基础
[2] https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

这篇关于Git 的特点—— Git 学习笔记 02的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1150311

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析