Natknąłem się na to pytanie, ponieważ mam podobny problem, w którym coś zbliżonego do struktury katalogów opartej na DB, przechowuje „pliki” i potrzebuję git, aby nim zarządzać. Jest dystrybuowany w chmurze przy użyciu replikacji, stąd jego punkt dostępu będzie za pośrednictwem MySQL.
Istota powyższych odpowiedzi wydaje się w podobny sposób sugerować alternatywne rozwiązanie zadanego problemu, który nie ma sensu, używając Gita do zarządzania czymś w bazie danych, więc spróbuję odpowiedzieć na to pytanie.
Git to system, który w istocie przechowuje bazę danych delt (różnic), którą można ponownie złożyć w celu odtworzenia kontekstu. Normalne użycie git zakłada, że kontekst jest systemem plików, a te delty są różnicami w tym systemie plików, ale tak naprawdę wszystko to jest hierarchiczną bazą danych delt (hierarchiczną, ponieważ w większości przypadków każda delta jest zatwierdzeniem z co najmniej 1 rodzice ułożeni na drzewie).
Tak długo, jak możesz wygenerować deltę, teoretycznie git może ją przechowywać. Problem polega zwykle na tym, że git oczekuje kontekstu, w którym generuje deltę, jako system plików, i podobnie, kiedy kasujesz punkt w hierarchii git, spodziewa się wygenerować system plików.
Jeśli chcesz zarządzać zmianami, w bazie danych masz 2 dyskretne problemy i rozwiązałbym je osobno (gdybym był tobą). Pierwszy to schemat, drugi to dane (chociaż w twoim pytaniu stwierdzasz, że dane nie są czymś, o co się martwisz). Problemem, który miałem w przeszłości, była baza danych Dev i Prod, w której Dev mógł wprowadzać przyrostowe zmiany w schemacie, a zmiany te musiały być udokumentowane w CVS i zaproponowane do życia wraz z dodatkami do jednego z kilku „statycznych” stoły Zrobiliśmy to, mając trzecią bazę danych o nazwie Cruise, która zawierała tylko dane statyczne. W dowolnym momencie można porównać schemat z Dev i Cruise, a my mieliśmy skrypt, aby pobrać różnicę między tymi 2 plikami i stworzyć plik SQL zawierający instrukcje ALTER, aby go zastosować. Podobnie wszelkie nowe dane, może być destylowany do pliku SQL zawierającego polecenia INSERT. Tak długo, jak pola i tabele są tylko dodawane i nigdy nie usuwane, proces może zautomatyzować generowanie instrukcji SQL w celu zastosowania delty.
Wywoływany jest mechanizm, za pomocą którego git generuje delty diff
oraz mechanizm, za pomocą którego łączy on 1 lub więcej delt z plikiem merge
. Jeśli potrafisz wymyślić metodę różnicowania i łączenia z innego kontekstu, git powinien działać, ale jak już wspomniano, możesz preferować narzędzie, które robi to za Ciebie. Moją pierwszą myślą o rozwiązaniu problemu jest https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration#External-Merge-and-Diff-Tools, który szczegółowo opisuje sposób zastąpienia wewnętrznego diff gita i narzędzie do scalania. Zaktualizuję tę odpowiedź, ponieważ wymyślę lepsze rozwiązanie problemu, ale w moim przypadku spodziewam się, że będę musiał jedynie zarządzać zmianami danych, o ile do tej pory plik bazy danych oparty na bazie danych może się zmienić, więc moje rozwiązanie może nie być dokładnie tym, czego potrzebujesz.