Использование Git определенно является возможным решением вашей проблемы. Я рекомендую вам распечатать документ так, чтобы каждая запись была одной строкой, например:
{
"a": 1,
"b": [
"x",
"y",
"z"
]
}
Это поможет уменьшить любые конфликты, если в будущем вы решите объединиться. несколько ветвей вместе. Помещение документа в одну строку может привести к конфликтам слияния, если вы попытаетесь выполнить слияние.
Кроме того, я рекомендую добавлять коммиты, используя libgit2 или одну из ее оболочек. Это означает, что вам не нужно беспокоиться о конфликте в рабочем дереве, хотя вам все же может потребоваться сериализовать доступы для обновления ссылок. Вероятно, он также будет более производительным, так как вам не нужно разворачивать дополнительный процесс.
Если ваш сценарий не требует сохранения старых версий или не всегда должен хранить каждую версию, вы можете захотеть использовать базу данных вместо Git и хранить несколько старых версий, если они вам нужны.