我想了解Git如何更好地工作。
鉴于一些任意文件和一些任意数量的提交,git如何决定如何将这些文件拆分成blob,然后使用SHA-1哈希进行唯一标识?
我刚刚将大约10个perl / C / java代码和文本提交到新的git repo中,并且不知何故git将文件分成了几个小段,它是如何决定如何划分这些段的?
答案 0 :(得分:7)
Git为每个文件的内容创建一个blob,除非已存在相同的内容(在这种情况下,它会重用blob)。但还有更多 - git还为每个目录,提交和签名标记创建对象。每个对象都存储在.git / objects中,直到重新打包存储库(自动或通过运行git gc
),在这种情况下,一些对象将被放在一起并整理成一个packfile(在.git / objects /中)包)。
它不会像你想象的那样在多个blob或小段之间拆分单个文件的内容。
答案 1 :(得分:3)
我建议您查看一些基本的(即“低级别”)参考。有关您的特定问题,请参阅Git社区手册中的Git Object Model部分。
之后,您可能有兴趣阅读Git from the Bottom Up (PDF)或优秀的Git Internals (PDF, US$9),以了解Git的低级别不足(“内容可寻址文件系统”和有向无环图关系)。
答案 2 :(得分:1)
所有文件都进入blob,但这并不一定意味着Git会为每个blob存储一个文件(Git有一个高效的打包格式,可以将这些文件放在一起)。如果您对Git打包格式的内部感兴趣,最好在他们的列表上查询或阅读他们的架构文档。