In git, there can be multiple clones of a repository, each clone can be independently modified, and clones can push or pull changes to one-another to get back in sync.

git-annex preserves that fundamental distributed nature of git, while dropping the requirement that, once in sync, each clone contains all the data that was committed to each other clone. Instead of storing the content of a file in the repository, git-annex stores a pointer to the content.

Each git-annex repository is responsible for storing some of the content, and can copy it to or from other repositories. Location tracking information is committed to git, to let repositories inform other repositories what file contents they have available.

The walkthrough shows how to create a distributed set of git-annex repositories with no central repository.

Prefer a central repository like GitHub? See the centralized git repository tutorial.