Использование перехватов Mercurial для создания / загрузки дампов базы данных для управления версиями
-
11-09-2019 - |
Вопрос
Я начал использовать Mercurial для управления версиями исходных файлов моего проекта Drupal (я новичок как в VCS, так и в Mercurial).Однако база данных по-прежнему "контролируется версиями", используя каталог с датированными .sql.gz файлами.
Что я хочу, так это иметь один файл дампа базы данных где-нибудь в моем репозитории, который был бы перезаписан текущим дампом при изменении базы данных и импортирован в базу данных, когда я захочу выполнить откат к другой версии.
Я сделал это вручную, и это сработало.Но чего бы мне действительно хотелось, так это чего-то, что автоматически выполняет сброс / загрузку при каждой фиксации / обновлении.Я бы действительно предпочел, чтобы он подключался к Mercurial, чем был чем-то внешним, вроде makefile, который сначала сбрасывает базу данных, а затем фиксирует, поскольку мне нравится работать с инструментами TortoiseHg, и мне не хочется запускать другой скрипт.
Теперь, кажется, что что-то вроде mysql .... < dumpfile.sql
на одном update
hook был бы простым способом загрузить дамп базы данных после каждого обновления.Но как насчет автоматического сброса?
Там был один похожий вопрос о крючке предварительной фиксации SVN, и общепринятым ответом было то, что это, вероятно, плохая идея.Применимо ли это к Mercurial?Может быть, еще один крюк (prechangegroup
?) сработало бы?
Редактировать:
Я должен отметить, что я использую его сам, на своем локальном компьютере.Он не должен масштабироваться дальше одного пользователя.
Решение
Должно быть нормально создать дамп базы данных с помощью pre-commit
крюк.Просто будьте осторожны, чтобы не использовать precommit
перехват, поскольку это совсем другое дело (выполняется внутри транзакции).
В общем, для каждой команды (update
, commit
, и т.д.) тот pre-<command>
перехват выполняется перед выполнением команды.
Другие советы
Похоже, это скорее операция обновления.Я предполагаю, что вы работали с базой данных, намеренно решили экспортировать схему sql и зафиксировали.Проблема возникает, когда кто-то другой обновляет данные от вас (или из какого-либо другого места) или вы обновляетесь от них.Mercurial имеет зацепка для обновлений.
Альтернативой было бы создать свой собственный плагин / расширение mercurial, которое действительно может связывать каталог с вашей базой данных (mysql) и потенциально предоставлять больше полезной информации.Все это зависит от того, знаете ли вы немного python.