Я сталкивался с этим вопросом, так как у меня есть похожая проблема, когда что-то приближает структуру каталогов на основе БД, хранит «файлы», и мне нужен git для управления этим. Он распространяется через облако с использованием репликации, поэтому его точка доступа будет через MySQL.
Суть вышеприведенных ответов, похоже, аналогичным образом предлагает альтернативное решение заданной проблемы, в какой-то мере упускает из виду использование Git для управления чем-либо в базе данных, поэтому я попытаюсь ответить на этот вопрос.
Git - это система, которая по сути хранит базу данных дельт (различий), которая может быть собрана заново для воспроизведения контекста. Обычное использование git предполагает, что контекст - это файловая система, а эти дельты - это различия в этой файловой системе, но на самом деле все git - это иерархическая база данных дельт (иерархическая, потому что в большинстве случаев каждая дельта является коммитом, по крайней мере родители, расставленные на дереве).
Пока вы можете генерировать дельту, теоретически git может хранить ее. Проблема обычно в том, что git ожидает, что контекст, в котором он генерирует дельту, является файловой системой, и, аналогично, когда вы извлекаете точку в иерархии git, он ожидает генерацию файловой системы.
Если вы хотите управлять изменениями в базе данных, у вас есть две отдельные проблемы, и я бы решил их отдельно (на вашем месте). Первый - это схема, второй - данные (хотя в вашем вопросе вы заявляете, что данные вас не беспокоят). В прошлом у меня была проблема с базой данных Dev и Prod, в которой Dev мог вносить постепенные изменения в схему, и эти изменения должны были документироваться в CVS и распространяться на них, наряду с дополнениями к одному из нескольких «статических». столы. Мы сделали это, имея третью базу данных под названием Cruise, которая содержала только статические данные. В любой момент можно было сравнить схему из Dev и Cruise, и у нас был сценарий, чтобы взять разность этих двух файлов и создать файл SQL, содержащий операторы ALTER, для его применения. Точно так же любые новые данные могут быть перенесены в файл SQL, содержащий команды INSERT. Пока поля и таблицы только добавляются и никогда не удаляются, процесс может автоматизировать создание операторов SQL для применения дельты.
Механизм, с помощью которого git генерирует дельты, равен diff
, а механизм, с помощью которого он объединяет 1 или более дельт с файлом, называется merge
. Если вы можете придумать метод разделения и слияния из другого контекста, git должен работать, но, как уже говорилось, вы можете предпочесть инструмент, который сделает это за вас. Моя первая мысль к решению этой проблемы - это https://git -scm.com / book / ru / v2 / Настройка Git-Git-Configuration # External-Merge-and-Diff-Tools , в которой подробно описывается, как заменить Внутренний инструмент сравнения и слияния в git. Я обновлю этот ответ, так как я придумаю лучшее решение проблемы, но в моем случае я ожидаю, что мне придется только управлять изменениями данных, поскольку база данных на базе БД может измениться, поэтому мое решение может быть не совсем то, что вам нужно.