git-annex allows you to store arbitrary metadata about the content of files
stored in the git-annex repository. The metadata is stored in the
git-annex branch, and so is automatically kept in sync with the rest of
git-annex's state, such as location tracking information.
Some of the things you can do with metadata include:
git annex metadata fileto show all the metadata associated with a file.
- metadata driven views
- Limiting the files git-annex commands act on to those with
or without particular metadata.
git annex find --metadata tag=foo --or --metadata tag=bar
- Using it in preferred content expressions. For example "metadata=tag=important or not metadata=author=me"
- Editing and viewing it with git-annex-metadata-gui, a gui for metadata operations.
Each file (actually the underlying key) can have any number of metadata
fields, which each can have any number of values. For example, to tag
tag field is typically used, with values set to each tag that
applies to the file.
The field names are limited to alphanumerics (and
[_-.]), and are case
insensitive. The metadata values can contain absolutely anything you
like -- but you're recommended to keep it simple and reasonably short
Here are some metadata fields that git-annex has special support for:
tag- With each tag being a different value.
month- When this particular version of the file came into being.
$field-lastchanged- This is automatically maintained for each field that's set, and gives the date and time of the most recent change to the field. It cannot be modified directly.
lastchanged- This is automatically maintained, giving the data and time of the last change to any of the metadata of a file.
To make git-annex automatically set the year and month when adding files,
git config annex.genmetadata true. Also, see
automatically adding metadata.
git-annex's metadata can be updated in a distributed fashion. For example,
two users, each with their own clone of a repository, can set and unset
metadata at the same time, even for the same field of the same file.
When they push their changes,
git annex merge will combine their
metadata changes in a consistent and (probably) intuitive way.
See the metadata design page for more details.