Блог о программировании на PHP, Yii2, 1C-Bitrix

Волшебство git или синхронизация БД

Иногда требуется контролировать изменения в БД, также как и изменения в файлах, например часто встает вопрос, а кто и когда изменил данную опцию?

С помощью системы 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