`

git暂缓区的理解

 
阅读更多
可以将git简单的分为三个区域
   1、工作区(working directry)
   2、暂缓区(stage index)
   3、历史记录区(history)   
如图:


git add files 把当前工作目录中的文件放入暂存区域
    其实做了两件事:
    1、将本地文件的时间戳、长度,当前文档对象的id等信息保存到一个树形目录中去(index,即平时说的暂存区)
    2、将本地文件的内容做快照并保存到Git 的对象库
    (综上:实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,记录了文件名、文件的状态信息(时间戳、文件长度等),文件的 内容并不存储其中,而是保存在 Git 对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。)
    如图:


在这个图中,我们可以看到部分 Git 命令是如何影响工作区和暂存区(stage, index)的:
   图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。
 
   图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个“游标”。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

   图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下

   当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID 被记录在暂存区的文件索引中

   当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树

git reset -- files 用来撤销最后一次git add files(因为每git add file一次,暂存区的文件都会被更改一次),你也可以用git reset 撤销所有暂存区域文件。

git checkout -- files 把文件从暂存区域复制到工作目录,用来丢弃本地修改。

当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变

当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动

当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改 动

当执行 "git status" 命令扫描工作区改动的时候,先依据 .git/index 文件中记录的(工作区跟踪文件的)时间戳、长度等信息判断工作区文件是否改变。如果工作区的文件时间戳改变,说明文件的内容 可能 被改变了,需要要打开文件,读取文件内容,和更改前的原始文件相比较(本地文件和与之对应的object库中的文件的内容进行对比),判断文件内容是否被更改。如果文件内容没有改变,则将该文件新的时间戳记录到 .git/index 文件中。因为判断文件是否更改,使用时间戳、文件长度等信息进行比较要比通过文件内容比较要快的多,所以 Git 这样的实现方式可以让工作区状态扫描更快速的执行,这也是 Git 高效的因素之一。

git diff files 来进行具体文件的变动对比,通常用来进行work directory 与 stage之间的对比,实质上是用 git objects 库中的快照与work directory 文件的内容的对比

参考文章:
http://www.worldhello.net/2010/11/30/2166.html
http://kb.cnblogs.com/page/148351/
  • 大小: 16.8 KB
  • 大小: 38.6 KB
分享到:
评论

相关推荐

    02Git入门理解版本管理的流程 Git Flow

    02★Git入门★理解版本管理的流程_Git_Flow

    git gui详细文档,可视化界面git全理解

    git可视化界面工具git gui的从入门到详细的教程,图文说明一看就懂。

    git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记

    git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git笔记git...

    git工具git工具

    git工具git工具git工具git工具git工具git工具git工具git工具git工具git工具

    最新Git与Github首篇巨作课程 Git&Github极速入门与攻坚实战结合课程 一次搞定Git.txt

    最新的Git与Github巨作课程,课程内容主旨分成了Git&Github极速入门与攻坚实战课程两部分,可以理解为一个是课程的详细教学篇,和一个精华缩减的集合。Git与Github教程详细介绍了Git的工作机制,Git命令行的基础学习...

    深入理解学习Git工作流.pdf

    最新版深入学习Git工作流,让你对Git工作流有一个很好的了解与学习~

    Git-1.9.0 git

    git

    Gitblit搭建及Git协作开发流程参考

    Gitblit搭建及Git协作开发流程参考 本文档主要介绍了Gitblit的搭建和Git协作开发流程,旨在帮助创业团队和小型开发团队快速搭建自己的代码服务器。同时,文档也提供了基本的开发流程,代码提交、代码上传、代码...

    git客户端、服务端安装、代码上传和eclipse安装git插件

    git 客户端、服务端安装、代码上传和 Eclipse 安装 Git 插件 git 客户端安装是在使用 Git 版本控制系统的第一步。安装客户端可以从官方网站下载安装包,或者使用包管理器进行安装。例如,在 Windows 平台上,可以...

    Git详解.pdf

    作者以自己对git的深刻理解,以图文的形式通俗易懂地介绍了git的使用方式和工作原理。从中可以看出作者对git的很深的功力。只要你看你就会懂。 本文档只是对复制粘贴而已,非常推崇原作者的分享精神,对原作者表示...

    git 可视化工具

    git 可视化工具git 可视化工具git 可视化工具git 可视化工具git 可视化工具git 可视化工具git 可视化工具git 可视化工具git 可视化工具git 可视化工具git 可视化工具git 可视化工具git 可视化工具git 可视化工具git ...

    Git安装使用教程 git-2.41.0-64安装包

    git安装包

    Git中文学习手册 Git入门

    1 2 Git 简史 1 3 Git 基础 1 4 安装 Git 1 5 初次运行 Git 前的配置 1 6 获取帮助 1 7 小结 2 Git 基础 2 1 取得项目的 Git 仓库 2 2 记录每次更新到仓库 2 3 查看提交历史 2 4 撤消操作 2 5 远程仓库的...

    GIT 压缩包 适用于压缩包式安装git

    GIT 压缩包 适用于压缩包式安装git

    Git权威指南_git_

    Git领域的集大成之作,在广度、深度和实战性上均史无前例国内顶级Git专家亲自撰写,Git官 方维护者等数位专家联袂推荐

    GIT相关书籍下载 Git+使用教程 Git权威指南 01链接

    GIT相关书籍下载 Git+使用教程 Git权威指南 01链接 GIT相关书籍下载 Git+使用教程 Git权威指南 02链接 Git+使用教程.pdf git.part1.rar git.part2.rar Gitbook.pdf git_ch03.pdf Git权威指南.pdf git简介.pdf ...

    GitKraken中文语言包

    GitKraken中文语言包 目前支援版本: 8.7.0 至 Release 下載 strings.json 取代檔案 Windows: %LOCALAPPDATA%\gitkraken\app-8.7.0\resources\app.asar.unpacked\src\strings.json Mac: /Applications/GitKraken.app/...

    git服务端和小乌龟客户端工具

    Git 服务端和小乌龟客户端工具 ...A:可以使用 Git 命令行工具来操作 Git repository,例如使用 git init 初始化 Git 仓库,使用 git add 添加文件到暂存区,使用 git commit 提交更改到 Git 仓库等。

    git常见指令大全脑图 超详细的git命令集合

    git常见指令大全脑图 超详细的git命令集合供大家学习下载,后续会持续进行更新,方便记忆git常见指令大全脑图 超详细的git命令集合供大家学习下载,后续会持续进行更新,方便记忆git常见指令大全脑图 超详细的git...

    linux系统安装git及git常用命令

    1 安装GIT 代码如下:$ sudo aptitude install git$ sudo aptitude install git-doc git-svn git-email git-gui gitk git软件包包含了大部分Git命令,是必装的软件包,第二行命令也是Git软件包,但是是单独发布的,...

Global site tag (gtag.js) - Google Analytics