For example, iOS has these features:
- iCloud backup restore or peer-to-peer transfer, very early in the device setup process
- Two ways for things to be stored in iCloud, each with a corresponding list of per-app (not per-folder) toggle switches in iCloud Settings
- “Saved to iCloud” normal syncing
- Requires apps to use the right APIs and to handle conflicting changes
- Allows same data to be read and modified by multiple devices
- iCloud backup
- Available for all apps
- Separate backup per device
- Only downloaded when setting up a new device
- In app sandboxes, only excludes
tmp
(Flatpak equivalent is somewhere in/run
) andLibrary/Caches
(equivalent tocache
directory in Flatpak sandbox) by default - Allows apps to set
isExcludedFromBackup
attribute for specific files (useful for things that are easy to recreate via download but are expected by the user to not be automatically deleted) - Includes system configuration such as home screen layout
- Backs up a list of installed apps without backing up their executables and assets
- “Saved to iCloud” normal syncing
- Synced list of previously installed apps, not separate per-device
Oh, and there is also bup, which might be what you are looking for:
https://bup.github.io/
Two more interesting solutions:
And one more, the rsync tool allows to store hard-linked copies of directory trees.
The key question is however - what do you want?
These are not the same requirements, especially the volume of data will differ.
And also, while you might to want or need to go patch by patch through conflicting source code tree with 10,000 different lines, I guess that absolutely nobody is willing or has time to go through a tree with 10,000 conflicting photographs and match them.
So the question back is: What is your specific use case and what exactly do you want to achieve?