Did you ever want to be able to tag your files, and use the tags to query
and select the files you want? For many sorts of files we use, this is clearly
better than being locked into a single hierarchial view of nested directories.

Semantic file systems
are a way to do things like this. But that's an entire separate filesystem,
often implemented as a FUSE layer. I have never wanted tagging enough to
take on that layer of complications.

A week ago I realized that there was a way to do this without using an
entirely separate filesystem. When we use git, we're used to having
different views of our files, called branches, that we switch between.

What then, if a git branch were generated from tags and other metadata
that meet a query, providing a custom view that meet the user's current
needs and could be incrementally refined.

To build this, I needed a nice way to store metadata in git, and since
git-annex happens to have a very nice way of
using git as a database, I naturally built it on top of
git-annex.

This means that the tags and other metadata are automatically synchronized
between different clones of the repository. Multiple users can be tagging
and setting other metadata at the same time, and their changes will merge
in a consistent way.

I have a long list of things to do to fully integrate
views into git-annex. However, they're already basically usable, and I'm
very pleased with how these dymanic views of the contents of a repository
are working out.

Today's release of git-annex includes views support, so give them a try!