Syncing bytes is easy, many solutions exist (and syncthing / syncthing-fork is good at it).
Syncing by merging changes and resolving possible conflicts is a much harder task. Theoretically git has all the right bits, including the pluggable diffing and merging. In practice, I haven't seen it seriously used in this capacity.
This is to say nothing about files you only want on one node but not on another (heavy stuff lives on server and laptop, but not mobile, etc.)
This is why special-case syncing tools that know how to sync semantically are indispensable.
Most apps aren't built to use it, especially on mobile. Think of the use case of your grocery list--you want one tap, open the list, type type type, and done. Anything else--having to tap save, sync, write a commit message, etc... anything, is a fail in my opinion. Git is great to use behind the scenes but I don't want to see it in the UI or slow down my workflow.
Indeed, this can be done, but usually isn't. And when it is done, it looks like another proprietary syncing protocol.
The thing is that you should not expect a user to explicitly host a git repo somewhere to for a grocery list app. Most apps are designed for users who are unwilling to do that, and are actually ready to pay to avoid whatever technical hurdles.
OTOH I see a niche for an app geared towards more technical users, chich would, among other things, allow you to point at a git / hg / whatever repo to use as the synchronization point.
Syncing by merging changes and resolving possible conflicts is a much harder task. Theoretically git has all the right bits, including the pluggable diffing and merging. In practice, I haven't seen it seriously used in this capacity.
This is to say nothing about files you only want on one node but not on another (heavy stuff lives on server and laptop, but not mobile, etc.)
This is why special-case syncing tools that know how to sync semantically are indispensable.