Hi all, I'm trying to implement the Git pack format. Parsing the index file and unpacking undeltified objects already works. However I'm unable to get the offset, if the type is OBJ_OFS_DELTA. The very much work-in-progress Go code and data can be found here: https://github.com/erikfastermann/notes/tree/wip/git >From the docs (https://git-scm.com/docs/pack-format) I assume, that the offset is a variable length integer, like the size. However my caclulation leads to a illogical result. When trying the hash 8c40ff4767d973b672fe5aa431cb8ba0593dd26a with: git verify-pack -v pack.pack I get: offset: 138650 size: 30. The base object 9b25d441c1bf358af01edc4eeba65870581a5ac1 (shown by verify-pack) has the offset 136887, which I think means the delta should be: 138650 - 136887 = 1763. Using the command: dd skip=138650 count=4 if=pack.pack bs=1 status=none | hexdump -C I get: ee 01 8c 63 The first two bytes, the type and the size are correctly computed. So the next varint should be the offset. 8c: 10001100 --- 63: 01100011 -> 1100011_0001100 -> 12684 ??? The result is the same when calculating it manually and with my program. I probably have some crucial misunderstanding about the format, so a clarification would be nice. Thank you for your help. Erik