对Git工作原理的一些理解


网上有很多关于git的教程,或copy或不完整,且大多停留于表面,看完之后对git仅有非常浅显的了解,有的只是对几条简单的命令进行了叙述。本文将结合git的设计原理和实现方法,帮助读者理解git,减少读者的学习成本。

一、Git原理:快照流

git与其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方法。 我们常见的版本控制工具,如CVS、Subversion、Perforce、Bazaar 等等,则是将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异,以文件变更列表的方式存储信息。
在这里插入图片描述
而Git更像是把数据看作是对小型文件系统的一组快照,将用户对代码的修改用快照的方式进行记录,主要对当时的全部文件制作一个快照并保存这个快照的索引。git记录信息修改的方式可以被称作为:快照流

在这里插入图片描述
比较上面两张图片的内容可以清楚的理解git和其他版本控制管理工具再设计上的差异。

二、Git对数据的存储方式

不同于其他类型vcs,Git 中的绝大多数操作都**只需要访问本地文件和资源**,一般不需要来自网络上其它计算机的信息,在本地磁盘上就有项目的完整历史。只有当你需要将项目开源或者推送到远端时,才需要通过网络传输资源。

正因为git将所有的数据都存储在本地,如果你要浏览项目的历史,Git 不需外连到服务器(中心服务器)去获取历史,然后再显示出来——它只需直接从本地数据库中读取。 你能立即看到项目历史。 如果你想查看当前版本与一个月前的版本之间引入的修改,Git 会查找到一个月前的文件做一次本地的差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本文件再来本地处理。

三、Git的3种工作状态

git对文件所处的状态进行了区分,以更好地管理当前代码。
git根据数据的状态,将内容分为了三种状态:

  • 已提交(committed):已提交表示数据已经安全的保存在本地数据库中。
  • 已修改(modified):已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存(staged):已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
    借用网上的图来说明各个状态的切换过程:
    在这里插入图片描述

图片说明了git各个状态的切换流程和使用的相关命令,其中涉及到三个相关的概念:

  • 工作目录(Working Directory)是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区域(Staging Area)是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。
  • Git 仓库目录(Repository)是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

了解了相关的概念之后:我们对git的整个流程进行叙述:

  1. 在我们使用git init命令初始化一个仓库,并向仓库包含的目录内放入了一些文件,此时该目录内的文件的区域就是工作目录,处于工作目录的内容git不会对文件修改进行记录。

  2. 当我们完成了对几个文件的修改,可使用git add命令跟踪文件,此时文件处于暂存状态,将文件的快照放入暂存区域。因为不是每一个文件都需要进行记录,所以可使用git add [filename]选择相应的文件,也可用git add -a 快速添加当前目录下的所有文件至暂存区。(git add 命令是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。 将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适)

  3. 我们在第2步已经记录下了需要提交的可用代码的列表,此时在完成了一阶段或某一功能的开发后,便可使用git commit命令提交更新。找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。Git仓库目录中的内容就是我们本地最终的可用代码。

  4. 推送远端仓库:在完成了本地的commit操作后,仓库处于已提交状态(committed),此时可使用git push [本地分支别名] [远端分支别名]将当前仓库(Repository)中本分支的内容提交至远端相应分支进行存储。(关于分支的操作会在后续进行介绍
    ps. 如果 Git 目录中保存着特定版本的文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

Git文件的声明周期:
在这里插入图片描述

四、命令总结

待续…

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值