Git索引

原文: http://gitbook.liuhui998.com/7_4.html

git中的索引(index)是一个存放了排好序的路径的二进制文件(通常是.git/index), 每一个条目都附带有一个块对象的SHA1值以及访问权限;

git ls-files可以显示出索引的内容:

$ git ls-files --stage

100644 63c918c667fa005ff12ad89437f2fdc80926e21c 0   .gitignore

100644 5529b198e8d14decbe4ad99db3f7fb632de0439d 0   .mailmap

100644 6ff87c4664981e4397625791c8ea3bbb5f2279a3 0   COPYING

100644 a37b2152bd26be2c2289e1f57a292534a51a93c7 0   Documentation/.gitignore

100644 fbefe9a45b00a54b58d94d06eca48b03d40a50e0 0   Documentation/Makefile

...

100644 2511aef8d89ab52be5ec6a5e46236b4b6bcd07ea 0   xdiff/xtypes.h

100644 2ade97b2574a9f77e7ae4002a4e07a6a38e46d07 0   xdiff/xutils.c

100644 d5de8292e05e7c36c4b68857c1cf9855e3d2f70a 0   xdiff/xutils.h

请注意, 在一些旧的文档中, 索引可能被称为"当前目录缓存(current directory cache)"或者"缓存(cache)".

索引(index)有三个重要的属性:

1、索引存储了生成一个(独一无二的)树对象所需要的所有信息.

例如, 运行git commit会从索引中生成一个树对象, 把这个树对象存储在对象数据库(object database)中, 然后把它与这个提交关联起来. (译注: 回忆"查看Git对象"一章, 每一个提交都对应一个树对象.)

2、索引使得对索引生成的树对象和工作树进行快速比较成为可能.

索引通过存储每个对象的一些额外信息(比如说最后修改时间)来完成这个工作. 这些数据没有在上面显示出来, 也没有存储在创建出来的树对象中, 但是它们可以用于快速找出当时工作目录中的文件与索引的差异, 从而让Git不必将文件的内容全部读出.

3、索引可以有效地表示树对象合并时的冲突信息, 使得每一个路径名都有足够的信息与树对象联系起来, 从而可以对它们进行三路合并.

在合并期间, 索引可能存储一个文件的多个版本(称为"stages"). 上面git ls-files的第三栏输出就是stage号. 在出现合并冲突时, 这个号码会是其他值, 而不是0.

因此索引实际上是一种暂存区域(temporary staging area), 它装载了你正在使用的树对象.

0

0
时间: 2024-11-06 14:27:28

Git索引的相关文章

Git历险记(四)——索引与提交的幕后故事

我想如果看过<Git历险记>的前面三篇文章的朋友可能已经知道怎么用git add,git commit这两个命令了:知道它们一个是把文件暂存到索引中为下一次提交做准备,一个创建新的提交(commit).但是它们台前幕后的一些有趣的细节大家不一定知晓,请允许我一一道来. Git 索引是一个在你的工作目录(working tree)和项目仓库间的暂存区域(staging area).有了它, 你可以把许多内容的修改一起提交(commit). 如果你创建了一个提交(commit),那么提交的一般是暂

git命令

1. git pull    更新服务器代码到本地a). git pull origin master是将origin这个版本库的代码更新到本地的master主分支 2. git push    将本地代码提交到服务器 3. git log    查看提交信息a). git log -p    查看历次的log信息及更改情况b). git log -p -4    查看距现在最近的4次的log信息及更改情况c). git log frameworks/    查看关于frameworks/目录修

git学习心得总结

Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理 有两种取得 Git 项目仓库的方法. 第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库. 第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来. 一.从当前目录初始化 Git init 初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中. 二.git clone ssh://[email protected]/git/mx28/linux

Git Step by Step – (4) 探索.git目录

前面一篇文章介绍了Git对象模型,接下来我们就进入".git"目录看看到底有什么东西,目录中哪些东西又跟Git对象模型相关.结合这个目录,我们将进一步了解Git的工作原理. .git目录 下面就开始进入.git目录了,通过"ls"命令可以看到.git目录中的文件和子目录: 对于这些文件和目录,下面给出了一些基本的描述.在后面后有logs.objects.refs.index和HEAD更详细的介绍 (D) hooks:这个目录存放一些shell脚本,可以设置特定的gi

Eclipse之Git提交项目

一.使用eclipse自带插件提交项目 1.自带git插件进行配置我们的用户名和密码,即是自己github注册的用户. windows-perferences-Team-Git-configuration 点击Add Entry... 输入email 邮箱 和 name 自己的用户名 2.eclipse生成SSH2 key windows--perference--General--Network connection--SSH2-key  management--General RSA Key

git 忽略文件

解决方案: 1. 本地仓库忽略 本地仓库的文件忽略规则可以在.git/info/exclude文件中添加.这些忽略的文件不会提交到共享库中,因而不会被协作者所共享. 2. 当前工作目录添加文件忽略 对于每一级工作目录,创建一个.gitignore文件,向该文件中添加要忽略的文件或目录.但在创建并编辑这个文件之前,一定要保证要忽略的文件没有添加到git索引中.使用命令git rm --cached filename将要忽略的文件从索引中删除. --摘抄.gitignore的格式规范 • 所有空行或

git配置及常用命令

1.配置 1)在网上下载git软件.我的是Git-1.9.5-preview20150319.exe和TortoiseGit-1.8.14.0-64bit.msi. 安装完后,从开始菜单点击git bash 2)输入 ssh-keygen -C "[email protected]" -t rsa 来生成一对密钥,默认保存到~/.ssh目录. 3)输入git config --global user.email [email protected] git config --global

【转】git在eclipse中的配置

原文网址:http://www.cnblogs.com/zhxiaomiao/archive/2013/05/16/3081148.html 一_安装EGIT插件 http://download.eclipse.org/egit/updates/ 或者使用Eclipse Marketplace,搜索EGit 二_使用EGIT前的配置 配置个人信息,最重要的是user.name和user.email l  Preferences > Team > Git > Configuration l

Eclipse上GIT插件EGIT使用手册

?一_安装EGIT插件 http://download.eclipse.org/egit/updates/ 或者使用Eclipse Marketplace,搜索EGit 二_使用EGIT前的配置 配置个人信息,最重要的是user.name和user.email l  Preferences > Team > Git > Configuration l  New Entry 三_新建GIT仓库 新建NC module project l  File > Team > Share