我已经开始使用Mercurial来控制我的Drupal项目源文件(我既是VCS又是Mercurial新手)。但是,数据库仍然使用日期.sql.gz文件的目录进行“版本控制”。
我想要的是在我的存储库中的某个地方有一个数据库转储文件,当数据库发生更改时会被当前转储覆盖,并在我想要回滚到另一个版本时导入数据库。
我是手动完成的,但它确实有效。但我真正喜欢的是在每次提交/更新时自动执行转储/加载的事情。我真的更喜欢它会挂钩到Mercurial而不是外部像makefile那样首先转储数据库然后提交,因为我喜欢使用TortoiseHg的工具,而且我不想让另一个脚本运行。
现在,似乎mysql .... < dumpfile.sql
挂钩上的update
之类的东西是在每次更新后加载数据库转储的简单方法。但是自动倾销怎么样?
关于SVN的预提交钩子有一个similar question,接受的答案是它可能是一个坏主意。它适用于Mercurial吗?也许另一个钩子(prechangegroup
?)会起作用?
编辑:
我应该指出,我自己在我的本地机器上使用它。它不应该扩展到单个用户之外。
答案 0 :(得分:5)
使用pre-commit
挂钩转储数据库应该没问题。请注意不要使用precommit
钩子,因为它是一个不同的东西(在事务内部运行)。
通常,对于每个命令(update
,commit
等),pre-<command>
挂钩在执行命令之前运行。
答案 1 :(得分:1)
似乎这更像是一个更新操作。我假设你正在研究数据库,故意选择导出sql架构,并且已经提交了。当其他人从您(或其他某个位置)更新或从您更新时,问题就出现了。 Mercurial有一个hook for updates.
另一种方法是创建自己的mercurial插件/扩展,它实际上可以将目录与数据库(mysql)对话,并可能提供更多有用的信息。这一切都取决于你知道一点python。