索引(index)是一個存放了排好序的路徑的二進制文件(通常是.git/index), 每一個條目都附帶有一個塊對象的SHA1值以及訪問權限;[git ls-files](http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html)可以顯示出索引的內容:
~~~
$ 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)"。 它有三個重要的屬性:
1. 索引存儲了生成一個(獨一無二的)樹對象所需要的所有信息.
例如, 運行[git commit](http://www.kernel.org/pub/software/scm/git/docs/git-commit.html)會從索引中生成一個樹對象, 把這個樹對象存儲在對象數據庫(object database)中, 然后把它與這個提交關聯起來。 (譯注: 回憶"查看Git對象"一章, 每一個提交都對應一個樹對象.)
2. 索引使得對索引生成的樹對象和工作樹進行快速比較成為可能。
索引通過存儲每個對象的一些額外信息(比如說最后修改時間)來完成這個工作. 這些數據沒有在上面顯示出來, 也沒有存儲在創建出來的樹對象中, 但是它們可以用于快速找出當時工作目錄中的文件與索引的差異, 從而讓Git不必將文件的內容全部讀出。
3. 索引可以有效地表示樹對象合并時的沖突信息, 使得每一個路徑名都有足夠的信息與樹對象聯系起來, 從而可以對它們進行三路合并。
在合并期間, 索引可能存儲一個文件的多個版本(稱為"stages"). 上面[git ls-files](http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html)的第三欄輸出就是stage號. 在出現合并沖突時, 這個號碼會是其他值, 而不是0。
因此索引實際上是一種暫存區域(temporary staging area), 它裝載了你正在使用的樹對象。
- 1. 介紹
- 歡迎使用Git
- GIT對象模型
- Git目錄 與 工作目錄
- Git索引
- 2. 第一步
- 安裝Git
- 安裝與初始化
- 3. 基本用法
- 獲得一個Git倉庫
- 正常的工作流程
- 分支與合并@基礎
- 查看歷史 -Git日志
- 比較提交 - Git Diff
- 分布式的工作流程
- Git標簽
- 4. 中級技能
- 忽略某些文件
- rebase
- 交互式rebase
- 交互式添加
- 儲藏
- Git樹名
- 追蹤分支
- 使用Git Grep進行搜索
- Git的撤消操作 - 重置, 簽出 和 撤消
- 維護Git
- 建立一個公共倉庫
- 建立一個私有倉庫
- 5. 高級技能
- 創建新的空分支
- 修改你的歷史
- 高級分支與合并
- 查找問題的利器 - Git Bisect
- 查找問題的利器 - Git Blame
- Git和Email
- 定制Git
- Git Hooks
- 找回丟失的對象
- 子模塊
- 6. Git生態體系
- Git 與之 Windows
- 使用Git進行系統部署
- 與 Subversion 集成
- 從其他代碼管理工具遷移到Git
- 圖形化的Git
- Git倉庫托管
- Git的其它用法
- Git的腳本支持
- Git 與編輯器
- 7. 原理解析
- Git是如何存儲對象的
- 查看Git對象
- Git引用
- Git索引
- 打包文件
- 更底層的Git
- 傳輸協議
- 術語表