Git:获取.git目录中的Blob路径

乔治·索维托夫

我想访问回购历史记录中的某些Blob。

目前,我使用来做到这一点git show $REV:$PATH但是文件很大,我不希望它们在脚本中读取并通过管道传输。我想获取它们的路径,然后将其读取为纯文件。

我可以依赖当前文档中描述的布局(例如.git/objects/ee/2403ffd236587a2b17ddc35b0e711fc99ba6a0),获取文件哈希并将其手动转换为路径吗?我的意思是在将来的版本中它不会很快改变,并且objects目录始终具有这种结构。有一些简单的方法可以执行此命令吗?

周二

虽然BLOB数据 不可侵犯的神圣的,它也是不可用凡人的格式:

  • 正如j6t在评论中所说,它是zlib压缩的(但这是实现细节,而不是诺言,即,您不应该只是打开并阅读它并使用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 showgit cat-file -p访问存储库数据时,不会使用任何过滤器

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章