我写了一个小的groovy实用程序,可以解压缩git blob对象,它工作,我可以看到blob的内容.提交也是如此.
问题出在树上.当我打开包装时,我得到:
tree 29100644 a????CK?)?wZ???S?.正如您在对象大小后看到的那样,无法读取内容.看起来这个内容保持不同的格式.
这是我的代码:
ByteArrayOutputStream result = new ByteArrayOutputStream()
InflaterOutputStream byteWriter = new InflaterOutputStream(result)
byteWriter.write(new File(input).bytes)
byteWriter.close()
println result
Run Code Online (Sandbox Code Playgroud)
在Ruby中尝试过类似的事情,结果是一样的.所以我认为问题在于文件格式不是Zlibbed.
但是如果我按照文章" Git树对象,它们是如何存储的? " 那么树的内容并不是一个可读的字符串:
一般格式是:
- 前4个字节声明对象类型.在我们的例子中,这四个字节是"树",ASCII编码.
- 然后是一个空间,
- 然后是条目,没有任何分隔.
确切的格式如下.所有大写字母都是"非终端",我将在稍后解释.
tree ZN(A FNS)*
Run Code Online (Sandbox Code Playgroud)
哪里:
N是NUL角色Z是以字节为单位的对象大小A是unix访问代码,ASCII编码,例如> 100644,用于vanilla文件.F是文件名,(我不确定编码.它绝对是ASCII兼容的),NUL终止.
S is the 20 byte SHA hash of the entry pointed to, 20 bytes long.
Run Code Online (Sandbox Code Playgroud)
这是一个例子.
假设我们有一个包含两个文件的目录,名为test和test2.目录的SHA是f0e12ff4a9a6ba281d57c7467df585b1249f0fa5.您可以在输出中看到条目的SHA哈希值
$ git cat-file -p f0e12ff4a9a6ba281d57c7467df585b1249f0fa5
100644 blob 9033296159b99df844df0d5740fc8ea1d2572a84 test
100644 blob a7f8d9e5dcf3a68fdd2bfb727cde12029875260b test2
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
513 次 |
| 最近记录: |