【问题标题】:Uncompressing zlib file in command line [duplicate]在命令行中解压缩zlib文件[重复]
【发布时间】:2015-04-22 14:24:01
【问题描述】:

当 Git 存储文件的快照时,它会存储一个称为 blob 的对象。

这是使用 zlib 压缩的..see http://nfarina.com/post/9868516270/git-is-simpler;要么我是盲人,要么他没有解释文件 blob 是如何在第一时间解压缩的(而其他所有内容都被解释为像菜鸟一样)

我们如何提取并查看 blob 的内容?谷歌搜索的大部分结果都适用于脚本/程序中的解压缩,而不是手动/CL:

Deflate command line tool, https://unix.stackexchange.com/q/22834

我一直在寻找一种单行命令行方式来对单个文件执行此操作。

提前致谢!

(即使这个问题听起来像是一个重复的问题,但另一个链接中的大量答案并不像这里的那样准确。我认为这个帖子应该保持活跃,或者把这个答案发布在那里以帮助其他人不复杂的放气方式)

【问题讨论】:

  • "openssl zlib -d" 执行要求:通过命令行解压缩 zlib 文件。

标签: git unix zlib compression


【解决方案1】:

使用git cat-file -p SHA1查看blob的文件内容。

文件内容是这样的:blob XXX NULL Content

例如:

a.txt 包含 Hello World

SHA-1 的内容是:

blob 11\000Hello World 然后这个字符串被 GZipped

如果您使用的是 unix,您可以使用它来压缩内容:
perl -MCompress::Zlib -e 'undef $/; print uncompress(<>)'

【讨论】:

  • 我试过这个,就像我上面提到的那样。这就是发生的事情:
    @precise32:~/gs$ git cat-file -p .git/objects/1b/2a93ec2d9f68e802d5d106983a395b368f0d36 致命:不是有效的对象名称 .git/objects/1b/2a93ec2d9f68e802d5d106983a395b368f0d3`
    6
  • 只是 SHA 没有路径。 git cat-file -p 1b2a93ec2d9f68e802d5d106983a395b368f0d36

  • ~/gs/.git/objects/a5$ ls bce3fd2565d8f458555a0c6f42d0504a848bd5
    ~/gs/.git/objects/a5$ git cat-file -p bce3fd2565d8f458555a0c6f42d0/504a
    > 致命:不是有效的对象名称 bce3fd2565d8f458555a0c6f42d0504a848bd5
  • 您需要 40 个字符。 2 是文件夹名称,38 是从 .git 文件夹中获取的文件名。如果你有来自git ls-tree -s 的 id,那么你已经有了完整的 id。
  • 啊...经典的noobie faux pas...谢谢一堆!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
相关资源
最近更新 更多