There are a few issues in how flows share global elements that may be an issue as well. There is another thread that talks about this as well. https://discourse.nodered.org/t/embed-custom-information-in-a-flow-file/33904/12.
I am actually developing my own 'audit' flow process, to keep deployed flows to remote devices consistent with the official version of said flows, I keep in a central repo. My working idea is just track the flow tab name, any version # included in that name, say like "Flow A 1.0" or "Flow B 2.0" for example.
The local audit flow watches the flows*.json file for updates/changes, then does a simple check sum parsing the flows*.json file in the ~/.node-red directory, as an extra check with the tab name and version #.
The local audit flow sends applicable information to a DB, and a 'monitor' auditor flow does the comparison and reporting as applicable.
This idea is not a backup and restore solution, just an audit tool. Of course I could send the flow content to the DB as well, but as I noted, there are issues because such is not a complete backup.