Git Implemented in OCaml
Can read and write all the Git objects: the usual blobs, trees, commits and tags but also the pack files, pack indexes and the index file (where the staging area lives). For instance, it is possible to make a pack file position independent (as the Zlib compression might change the relative offsets between the packed objects), to generate pack indexes from pack files, or to expand the filesystem of a given commit. To build and install the project, simply run:
The loose object files can be read and written; The pack files (collections of compressed loose objects using a binary-diff representation) and pack indexes (indexes of pack files) can be read and written).
Source: github.com