Git临时区域只是一个索引吗?

时间:2012-08-27 07:59:43

标签: git git-index

Pro Git一书说,暂存区域只是一个列表或索引,表示在完成git commit时将提交哪些文件,现在名称index更为人所知作为“临时区域”。

但是如果我们修改已经成为repo一部分的文件foo.txt,并使用git add foo.txt进行暂存,并再次修改该文件,那么现在该文件既“暂存”又“修改” “(如git status所示),如果我们提交,”暂存“版本将进入提交。第二次编辑不会进入。

那么,如果它只是一个索引 - 一个文件列表,那么“暂存区”如何跟踪第一次编辑的内容?

5 个答案:

答案 0 :(得分:13)

索引是可以提交的工作目录的视图。它可以被视为预提交状态,并不像“文件列表”那么简单。当您执行git add时,文件(带有更改)将添加到索引中,并且在您添加之前不会看到更新的更改。

答案 1 :(得分:3)

index就像完成工作的 out basket 。在任何时候,您都可以add将(部分)已完成的文件添加到 out basket ,并将其替换为您当前副本的上一个副本,以便在您最终决定{{1}时它将使用 out basket (当前commit)的内容来创建提交。

此外,您之前的index将在repo中创建一个blob对象,如果需要,可以通过各种日志找到它。过了一会儿(30天+)它会随add消失。

答案 2 :(得分:2)

它是一个索引,但是是一个修改树列表,而不是直接文件。请参阅the different type of objects git handle

答案 3 :(得分:0)

那么,如果只是索引,则“登台区域”如何跟踪第一次编辑的内容?

索引是名称列表和指向内容的指针。在书籍中,是页码。在Git索引中,它是存储库的对象数据库中的对象ID。

这就是Git索引,它是内容指针的路径名索引列表。

git add的某些路径名称基本上是

sha=`git hash-object -w path/to/it`
git update-index --cacheinfo 100644,$sha,path/to/it 

除了git add会检查可执行文件并使用100755进行递归添加并检查您的.gitignore以及其他似乎最方便的东西。这是将内容添加到对象db并更新索引的便捷命令。

答案 4 :(得分:-2)

暂存区域不是列表,也不是索引,它表示在进行git提交后将提交哪些文件

如果是那样的话(即简单的列表),git add永远不会像广告中那样起作用。

相反,git add必须在发出添加命令时保存文件的内容。因此,它会快照文件,然后将这些快照放入暂存区域(又名“索引”,恕我直言,对于名称来说,这确实是一个很差的选择)。

所以是的,实际上,这本书的陈述具有误导性和混乱性。 但这并不奇怪。大部分git文档令人困惑,而且考虑不周。

继续,让我失望。我确定我对此是正确的。