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.

History
The development of git-annex began in 2010. In 2012-13 the development was funded through a Kickstarter campaign. The main development of this campaign was the git-annex assistant, a component that runs in the background to automate the synchronization of repositories.

The next crowd funding campaign for 2013-14 was organized over a self-hosted platform.

Design
git-annex uses Git to index files but does not store them in the Git history. Instead, a symbolic link representing and linking to the probably large file is committed. git-annex manages a content-addressable storage for the files under its control. 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.

Availability
git-annex packages are available for a variety of operating systems, including:
 * Debian
 * Ubuntu
 * Fedora
 * FreeBSD
 * Arch Linux
 * NixOS
 * Guix
 * Gentoo
 * OpenBSD
 * Android
 * macOS (via Homebrew)
 * Windows