git-annex

git-annex is a distributed file synchronization system written in Haskell.

It aims to solve the problem of sharing and synchronizing collections of large files independent from a commercial service or even a central server.

[3] The main development of this campaign was the git-annex assistant, a component that runs in the background to automate the synchronization of repositories.

A separate Git branch logs the location of every file.

Thus users can clone a git-annex repository and then decide for every file whether to make it locally available.