我试图了解git设法"记住"文件的名称及其路径的方式,因为它只存储blob中的文件内容.Abizem 在这里的解释是好的吗?(这是我见过的最好的)
接下来的问题是,git然后确定何时我们有相似性,特别是在'移动'或路径名更新之后?(根据我的Q 子目录重命名).我需要能够维护一个现有的工作流程,该工作流程使用路径重命名作为低级个人VCS的一部分(对于大型版本我们有一个很大的铁VCS,但是没有用于日常/小时到小时的使用)
Syl*_*sne 10
git定义了四种对象(Commit,Tag,Tree,Blob).在其内容的散列之后标识每个对象.
重命名涉及的三个对象是:
blob:这对应于一个已提交的文件,该对象的内容是原始文件的压缩内容
tree:这对应于目录列表,它包含filename到其他对象(blob或树)的映射,并记录访问权限
commit:这包含提交消息,指向父提交的指针(第一次提交除外)和树对象
因此,当您重命名文件并提交它时,将创建一个新的树对象(如果它位于子目录中,并且具有一个新的树对象),并且对象具有新的映射名称,但该对象是相同的.
但是,git不会跟踪重命名,它会尝试通过比较文件内容来重新发现它们.如果两个文件非常相似,但名称不同,则认为它是重命名.这可能很耗时,如果有大量文件,它可能会失败.
编辑:看一下Git社区书,它对git商店信息的解释有很好的解释.