Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: for the plan.

Jump to: navigation, search

JGit/New and Noteworthy/5.6



FileReftableDatabase is a new Reftable [1] implementation for JGit's standard file storage backend besides DfsReftableDatabase providing a Reftable implementation for dfs storage API based backends.

Reftable is a binary, block-based storage format for the ref-database. It provides several advantages over the traditional packed and loose refs storage.

  • Storage format:
    • O(1) write performance, even for deletions and transactions.
    • atomic updates to the ref database.
    • O(log N) lookup and prefix scans
    • free from restrictions imposed by the file system: it is case-sensitive even on case-insensitive file systems, and has no inherent limitations for directory/file conflicts
  • Prefix compression reduces space usage for repetitive ref names, such as gerrit's refs/changes/xx/xxxxx format.
  • FileReftableDatabase is based on FileReftableStack, which does compactions inline. This is simple, and has good median performance, but every so often it will rewrite the entire ref database.
  • refs in existing repositories can be converted to reftable using the JGit command line command "convert-ref_storage".
$ convert-ref-storage --format reftable
  • A C and a golang implementation of reftable is being developed here [2] but isn't yet integrated in git-core or git libraries

[1] Reftable Specification
[2] C and golang implementation of reftable

Other Changes

The complete list of new features and bug fixes is available in the release notes.


The following 19 developers worked on this release:

Christian Halstrick, David Ostrovsky, David Pursehouse, Gunnar Wagenknecht, Han-Wen Nienhuys, Ivan Frade, John Tipper, Jonathan Nieder, Jonathan Tan, Luca Milanesio, Masaya Suzuki, Matthias Sohn, Michael Keppler, Minh Thai, Roan Hofland, Terry Parker, Thomas Wolf, Tim Neumann, Yunjie Li

Back to the top