Иногда требуется контролировать изменения в БД, также как и изменения в файлах, например часто встает вопрос, а кто и когда изменил данную опцию?
С помощью системы GIT можно контролировать файлы, но не базу. Но ведь база легко дампится в файл — поэтому с помошью системы хуков git вопрос связности данных решается достаточно легко.
В папке hooks/ обычно содержатся примеры-заготовки следующих хуков:
applypatch-msg.sample commit-msg.sample post-commit.sample post-receive.sample post-update.sample pre-applypatch.sample pre-commit.sample pre-rebase.sample prepare-commit-msg.sample update.sample
Для решения нашей задачи базу данных нужно дампить в файл непосредственно перед коммитом, а извлекать и заливать — сразу после чекаута или фетча.
cd .git/hooks cp pre-commit.sample pre-commit chmod +x pre-commit
#!/bin/sh # Refresh the SQL schema file for inclusion within the git commit # If something fails, exit with status other than 0 set -e # first, remove our original schema cd /var/www rm -f filename.sql # generate a new schema mysqldump -u username --password=password database > filename.sql # Add the schema to the next commit git add filename.sql # Exit success exit 0