Использование перехватчиков Mercurial для создания / загрузки дампов базы данных для управления версиями - PullRequest
5 голосов
/ 19 сентября 2009

Я начал использовать Mercurial для управления версиями исходных файлов моего проекта в Drupal (я новичок в VCS и в Mercurial). Однако база данных по-прежнему «контролируется версией» с использованием каталога датированных файлов .sql.gz.

Я хочу, чтобы где-то в моем хранилище был один файл дампа базы данных, который был бы перезаписан текущим дампом при изменении базы данных и импортирован в базу данных, когда я хочу выполнить откат до другой версии.

Я сделал это вручную, и это сработало. Но то, что я действительно хотел бы, это то, что делает дамп / загрузку автоматически при каждом коммите / обновлении. Я действительно предпочел бы, чтобы он подключался к Mercurial, а не как что-то внешнее, например, make-файл, который сначала создает дамп базы данных, а затем фиксирует, поскольку мне нравится работать с инструментами TortoiseHg, и я не чувствую необходимости запуска другого сценария.

Теперь кажется, что что-то вроде mysql .... < dumpfile.sql на хуке update будет простым способом загрузить дамп базы данных после каждого обновления. Но как насчет автоматического сброса?

Был похожий вопрос о хуке SVN перед фиксацией, и был принят ответ, что это, вероятно, плохая идея. Это относится к Mercurial? Может быть, подойдет другой крючок (prechangegroup?)?

EDIT:

Я должен указать, что я использую это сам, на моей локальной машине. Он не должен масштабироваться за пределы одного пользователя.

Ответы [ 2 ]

5 голосов
/ 20 сентября 2009

Это нормально, чтобы выгрузить базу данных с помощью pre-commit hook. Только будьте осторожны, чтобы не использовать precommit ловушку, так как это другое (выполняется внутри транзакции).

Как правило, для каждой команды (update, commit и т. Д.) Хук pre-<command> запускается перед выполнением команды.

1 голос
/ 19 сентября 2009

Похоже, это скорее операция обновления. Я предполагаю, что вы работали с базой данных, сознательно решили экспортировать схему sql и сделали коммит. Проблема возникает, когда кто-то другой обновляет данные от вас (или другого места) или вы обновляете их. У Mercurial есть хук для обновлений.

В качестве альтернативы можно создать собственный плагин / расширение Mercurial, который может фактически связывать каталог с вашей базой данных (MySQL) и потенциально предоставлять более полезную информацию Все зависит от того, знаете ли вы немного Python.

...