我正在尝试了解 git 设法“记住”文件名及其路径的方式,因为它只将文件内容存储在 blob 中。解释是在链接在这里Abizem 写的不错吗? (这是迄今为止我见过的最好的)
后续问题是 git 如何(在哪里)确定我们何时具有相似性,特别是在“移动”或路径名更新之后? (根据我的问题子目录重命名)。我需要能够维护一个现有的工作流程,该工作流程使用路径重命名作为低级个人 VCS 的一部分(我们有一个用于大型发布的大型 VCS,但没有适合日常/每小时使用的东西)
git
定义了四种对象(Commit、Tag、Tree、Blob)。每个对象在其内容的哈希值之后被识别。
涉及重命名的三个对象是:
blob:这个对应一个已提交的文件,该对象的内容是原始文件的压缩内容
树:这对应于目录列表,它包含文件名到其他对象(blob 或树)的映射,并记录访问权限
提交:包含提交消息、指向父提交(第一个提交除外)的指针以及指向树对象的指针
因此,当您重命名文件并提交它时,会创建一个新的树对象(如果它位于子目录中,则创建多个树对象),并具有到对象的新映射名称,但对象是相同的。
然而,git 不跟踪重命名,它尝试通过比较文件内容来重新发现它们。如果两个文件确实相似,但名称不同,则认为这是重命名。这可能非常耗时,并且如果有大量文件,则可能会失败。
编辑:看看 Git 社区书籍,其中有非常好的解释关于git如何存储信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)