Yes, file synchronization is really the hard part from an architecture POV.
From everything I've seen so far, Git appears to provide the best solution. It is rather complex though, and it's a big challenge to build an intuitive user experience on top of this that shields non-technical users from a lot of the complexities.