Pro Git一书说,暂存区域只是一个列表或索引,表示在完成git commit
时将提交哪些文件,现在名称index
更为人所知作为“临时区域”。
但是如果我们修改已经成为repo一部分的文件foo.txt
,并使用git add foo.txt
进行暂存,并再次修改该文件,那么现在该文件既“暂存”又“修改” “(如git status
所示),如果我们提交,”暂存“版本将进入提交。第二次编辑不会进入。
那么,如果它只是一个索引 - 一个文件列表,那么“暂存区”如何跟踪第一次编辑的内容?
答案 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文档令人困惑,而且考虑不周。
继续,让我失望。我确定我对此是正确的。