【问题标题】:Using Mercurial hooks to create/load database dumps for versioning使用 Mercurial 挂钩创建/加载数据库转储以进行版本控制
【发布时间】:2010-11-29 18:26:51
【问题描述】:

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

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

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

现在,在update 钩子上的mysql .... < dumpfile.sql 之类的东西似乎是在每次更新后加载数据库转储的简单方法。但是自动倾销呢?

关于 SVN 的 pre-commit 钩子有一个 similar question,接受的答案是这可能是个坏主意。它适用于 Mercurial 吗?也许另一个钩子 (prechangegroup?) 会起作用?

编辑:

我应该指出我自己在本地机器上使用它。它的规模不应超过单个用户。

【问题讨论】:

    标签: version-control mercurial mercurial-hook


    【解决方案1】:

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

    一般来说,对于每个命令(updatecommit 等),pre-<command> 挂钩在命令执行之前运行。

    【讨论】:

    • 太棒了!它通过 hg commit 工作得很好。但是...如果我使用 tortoisehg,我必须提交两次(一次用于源文件,一次用于新创建的数据库转储)...您是否知道如何解决这个问题?
    • 嗡嗡声这意味着 THG 将文件限制为它认为已更改的文件。我不太了解 THG,无法解决这个问题(可能在 THG 邮件列表中询问)。
    • 谢谢。最多,我可以使用命令行进行提交。还不错。
    【解决方案2】:

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

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

    【讨论】:

    • 我应该补充一点,这是一个简单的单开发人员设置。没有人会从我这里更新或反之亦然(我现在已经添加了)。另外 - 我想在更新时导入转储,但也想在提交时导入转储,这就是困难所在(我认为?)。至于 mercurial 插件/扩展 - 我确实知道一些 python(但不知道 Mercurial 的 API)。 mysqldump/mysql不能给我什么?
    猜你喜欢
    • 2011-03-12
    • 2010-10-29
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多