Git index file parser

pip install gin==0.1.006


gin - a Git index file parser

The gin script parses the databases that live at .git/index in any Git repository, and shows the contents in a readable form, or as a JSON dump. These databases store the current state of the stage area, sometimes called the index or cache.


pip3 install gin

Or clone this repo and use the gin script.

Or download the script directly.

The script requires Python 3.


usage: gin [-h] [-j] [-v] [path]

parse a Git index file

positional arguments:
  path           path to a Git repository or index file

optional arguments:
  -h, --help     show this help message and exit
  -j, --json     output JSON
  -v, --version  show script version number


  • Show the Git index file in the current repository, if in the repository root:

  • Show the Git index file in the ~/git-repo repository:

    gin ~/git-repo    
  • Show the Git index file ~/git-repo/.git/index:

    gin ~/git-repo/.git/index

The script supports index file versions 2 and 3, and will skip over extensions.

Use the -j or --json flags to dump JSON.


To use the script as a module, rename it to

Report issues

Submit issues on Github.

Tweet @sbp with short comments or enquiries.


Pretty print an index

$ gin test/01.index


  signature = DIRC
  version = 3
  entries = 5

  entry = 1
  ctime = 1363549359.0
  mtime = 1363549359.0
  dev = 16777217
  ino = 1154043
  mode = 100644
  uid = 501
  gid = 20
  size = 6
  sha1 = d5f7fc3f74f7dec08280f370a975b112e8f60818
  flags = 9
  assume-valid = False
  extended = False
  stage = (False, False)
  name = added.txt


  checksum = True
  sha1 = 1ef0972eb948e6229240668effcb9c600fe5888d

Get name fields from an index

$ gin | egrep '^  name ='


  name = .gitignore
  name = MANIFEST
  name = Makefile
  name =
  name = gin
  name =
  name = test/01.index
  name = test/01.json
  name = test/01.txt
  name = test/run

Which should be equivalent to git ls-files.