gpt4 book ai didi

Git:在 .git 目录中获取 blob 路径

转载 作者:行者123 更新时间:2023-12-05 03:10:10 24 4
gpt4 key购买 nike

我想在 repo 历史的某个时刻访问一些 blob。

目前,我使用 git show $REV:$PATH 来做到这一点。但是文件非常大,我不希望它们在脚本中被读取和传输。我想获取它们的路径,然后作为纯文件读取。

我可以依赖当前文档中描述的布局(例如 .git/objects/ee/2403ffd236587a2b17ddc35b0e711fc99ba6a0),获取文件哈希并将其手动转换为路径吗?我的意思是它在未来的版本中不会很快改变,对象目录总是有这个结构。有没有更简单的方法可以使用一些管道命令来做到这一点?

最佳答案

虽然 blob 数据 inviolablesacrosanct , 它也是一种凡人无法使用的格式:

  • 作为j6t said in a comment ,它是 zlib-deflated(但这是一个实现细节,而不是 promise ,即,你不应该只是打开并阅读它并使用 zlib inflator 来恢复它,你应该让 Git 为你做那件事)。

  • 作为Leon said in a comment ,它可能已被打包,在这种情况下,首先没有可打开和读取的未打包目标文件。相反,您必须打开包索引文件(以找到正确的包文件),然后打开正确的包文件(以找到带有定位对象及其基础的目录的打包数据),然后撤消 xdelta。风格,但是not actually 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> ,您将获得数据的存储库格式。也就是说,当 checkout 一个特定的提交时(使用 git checkout ),Git 将提取一个 .gitattributes文件和/或使用 git config设置以查找要进行的污迹过滤器和/或 CR-LF 调整。这些过滤器应用于存储库中的数据以生成文件的工作树副本。但是当你使用 git showgit cat-file -p要访问存储库数据,不使用过滤器

关于Git:在 .git 目录中获取 blob 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com