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.