Version control 使用Mercurial钩子创建/加载用于版本控制的数据库转储

Version control 使用Mercurial钩子创建/加载用于版本控制的数据库转储,version-control,mercurial,mercurial-hook,Version Control,Mercurial,Mercurial Hook,我已经开始使用Mercurial来控制Drupal项目源文件的版本(我既是一名VCS新手,也是Mercurial新手)。但是,数据库仍然是“版本控制”的,使用的是一个带有日期的.sql.gz文件目录 我想要的是在我的存储库中的某个地方有一个数据库转储文件,当数据库发生更改时,该文件将被当前转储文件覆盖,当我想要回滚到另一个版本时,该文件将被导入到数据库中 我是手工做的,效果很好。但我真正想要的是在每次提交/更新时自动进行转储/加载。我真的希望它能挂接到Mercurial,而不是像makefile

我已经开始使用Mercurial来控制Drupal项目源文件的版本(我既是一名VCS新手,也是Mercurial新手)。但是,数据库仍然是“版本控制”的,使用的是一个带有日期的.sql.gz文件目录

我想要的是在我的存储库中的某个地方有一个数据库转储文件,当数据库发生更改时,该文件将被当前转储文件覆盖,当我想要回滚到另一个版本时,该文件将被导入到数据库中

我是手工做的,效果很好。但我真正想要的是在每次提交/更新时自动进行转储/加载。我真的希望它能挂接到Mercurial,而不是像makefile这样的外部文件,先转储数据库,然后提交,因为我喜欢使用Ortoisehg的工具,我不想再运行另一个脚本

现在,看起来像是一个
mysql….<在
更新
钩子上的dumpfile.sql
是在每次更新后加载数据库转储的一种简单方法。但是自动倾倒呢

关于SVN的pre-commit钩子有一个问题,人们接受的答案是这可能是个坏主意。它适用于Mercurial吗?也许另一个钩子(
prechangegroup
?)可以工作

编辑:


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

看起来这更像是一个更新操作。我假定您正在处理数据库,故意选择导出sql模式,并已提交。当其他人从您(或其他位置)或您从他们那里更新时,就会出现问题。Mercurial有一个


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

使用
预提交
钩子转储数据库应该没问题。只是要小心不要使用
预提交
钩子,因为它是不同的东西(在事务内部运行)


一般来说,对于每个命令(
update
commit
等),
pre-
钩子在命令执行之前运行。

我应该补充一点,这是一个简单的单一开发人员设置。没有人会从我这里更新,反之亦然(我现在已经添加了它)。另外-我想在更新时导入转储,但也在提交时导出转储,这其中存在困难(我想是吧?)。至于mercurial插件/扩展,我知道一些python(但不知道mercurial的API)。mysqldump/mysql不能给我什么?太好了!它通过hg提交工作正常。但是如果我使用tortoisehg,我必须提交两次(一次用于源文件,一次用于新创建的数据库转储)。。。你会不会碰巧知道如何避开这个问题?嗯,这意味着THG将文件限制为它认为已更改的文件。我对THG还不太了解,所以无法回避(也许可以在邮件列表中询问)。无论如何,谢谢。最多,我可以使用命令行进行提交。没那么糟。