请指导我,创建提交对象时创建的 SHA 是仅文件内容的 SHA 还是还有一些其他输入到 HASH 函数中,例如提交的作者、时间戳和日期等?
我心中有以下困惑
commit object's index=SHA(Contents of file)?
OR
commit object's index=SHA(Contents of file+author of commit+date of the day+time of the day)?
答案1
永远不会存在纯文件内容的提交git
,因此您的第一个假设(SHA(文件内容))永远不会成立。实际上,每个文件你签到后,会被存储为一个对象,这对象的名称是文件的 SHA-sum。
但你甚至不只是签入文件,它还涉及一个文件等级制度. 文件层次结构类似于树对象,其中包含此(子)层次结构中的所有文件(以对象名称 — SHA-sum 表示)、文件的名称和权限。树文件的对象名称是此列表的 SHA-sum。这也可以递归工作,即您可以从树对象引用树对象(这是子目录的工作方式)。
您实际犯罪由(0 个或多个)父提交的 SHA 总和、类似于存储库根目录的树对象的名称、提交日期、提交作者、提交消息等组成。提交名称(“修订号”)是这清单。