Expand description

A crate for handling the references stored in various formats in a git repository.

References are also called refs which are used interchangeably.

Refs are the way to keep track of objects and come in two flavors.

  • symbolic refs are pointing to another reference
  • peeled refs point to the an object by its ObjectId

They can be identified by a relative path and stored in various flavors.

  • files
    • loose
      • one reference maps to a file on disk
    • packed
      • references are stored in a single human-readable file, along with their targets if they are symbolic.
  • ref-table
    • supersedes all of the above to allow handling hundreds of thousands of references.


pub use git_object::bstr;


Transactions are the only way make changes to the ref store in order to increase the chance of consistency in a multi-threaded environment.


Indicate that the given BString is a validate reference name or path that can be used as path on disk or written as target of a symbolic reference

A validated and potentially partial reference name - it can safely be used for common operations.

A validated prefix for references to act as a namespace.

A validated complete and fully qualified reference name, safe to use for all operations.

A fully owned backend agnostic reference

The git reference store. TODO: Figure out if handles are needed at all, which depends on the ref-table implementation.


Denotes the kind of reference.

Denotes a ref target, equivalent to Kind, but with mutable data.

Denotes a ref target, equivalent to Kind, but with immutable data.