虽然 blob 数据是 不可侵犯且神圣不可侵犯的,但它的格式也对普通人无法使用:
正如j6t在评论中所说,它是zlib-deflated(但这是一个实现细节,而不是一个承诺,即你不应该只是打开并阅读它并使用zlib充气器来恢复它,你应该让Git为你做那个)。
正如Leon 在评论中所说,它可能已经打包,在这种情况下,首先没有解压的目标文件可以打开和读取。相反,您必须打开包索引文件(以找到正确的包文件),然后打开正确的包文件(以找到包含对象及其基础的目录的打包数据),然后撤消xdelta样式,但实际上不是 xdelta,这些项目的压缩。
如果你想用管道命令读取文件,你可以先找到哈希:
$ git rev-parse HEAD~20:Makefile
bdb55792f11a9f9565c4aad147a492caed7f09c3
然后用于git cat-file -p
提取原始对象,或git cat-file -t
获取其类型(或--batch-check
读取有关对象的信息等)。请注意,您实际上也可以直接将路径传递给git cat-file
自身:
$ git cat-file -t HEAD~20:Makefile
blob
但是请注意,还有一个潜在的绊脚石:当使用git cat-file -p <blob-specifier>
或访问 blob 的内容时git show <blob-specifier>
,您将获得数据的存储库格式。也就是说,在签出特定提交时(使用git checkout
),Git 将提取.gitattributes
文件和/或使用git config
设置来查找要进行的涂抹过滤器和/或 CR-LF 调整。这些过滤器应用于存储库中的数据以生成文件的工作树副本。但是当您使用git show
或git cat-file -p
访问存储库数据时,不使用过滤器。