5

我已经开始使用 Mercurial 对我的 Drupal 项目源文件进行版本控制(我既是 VCS 又是 Mercurial 新手)。但是,数据库仍然是“版本控制的”,使用日期为 .sql.gz 文件的目录。

我想要的是在我的存储库中的某处有一个单一的数据库转储文件,当数据库更改时,它将被当前转储覆盖,并在我想回滚到另一个版本时导入到数据库中。

我手动完成了它,并且有效。但我真正想要的是在每次提交/更新时自动进行转储/加载的东西。我真的更喜欢它与 Mercurial 挂钩,而不是像 makefile 这样首先转储数据库然后提交的外部东西,因为我喜欢使用 TortoiseHg 的工具,而且我不想运行另一个脚本。

现在,看起来像挂钩这样的东西mysql .... < dumpfile.sqlupdate是每次更新后加载数据库转储的一种简单方法。但是自动倾销呢?

关于 SVN 的预提交钩子有一个类似的问题,接受的答案是这可能是个坏主意。它适用于 Mercurial 吗?也许另一个钩子(prechangegroup?)会起作用?

编辑:

我应该指出,我自己在本地机器上使用它。它不应该扩展到单个用户之外。

4

2 回答 2

5

pre-commit钩子转储数据库应该没问题。请注意不要使用precommit钩子,因为它是另一回事(在事务内部运行)。

通常,对于每个命令(updatecommit等),pre-<command>钩子都会在命令执行之前运行。

于 2009-09-19T20:52:13.303 回答
1

似乎这更像是一个更新操作。我假设您正在处理数据库,故意选择导出 sql 模式,并已提交。当其他人从您(或其他位置)更新或您从他们更新时,问题就出现了。Mercurial 有一个更新的钩子。

另一种方法是创建您自己的 mercurial 插件/扩展,它实际上可以与您的数据库 (mysql) 对话,并可能提供更多有用的信息。这一切都取决于你对 python 的了解。

于 2009-09-19T18:45:38.560 回答