You can run an rsyncd and connect to it using
-r is recursive
-v is verbose
-a is archive (recursive plus modification times, users, groups and symlinks).
--link-dest flag to specify a place to diff against.
Rsync will automatically hard-link to files in here if they are the same as the source.
Since it uses hard links, it's ok to delete older versions. The files will stick around if they are needed. Hard links effectively use reference counting.