如何使用 git 和 git 钩子同步数据库,以及如何调试(如果它不起作用)



在操作系统上:Ubuntu 12.04

我的服务器上有一个drupal部署(实时网站)和一个临时环境(测试网站)。每次我从我的暂存网站中提取更改时,我都希望按照此处的指示自动同步数据库:http://ben.kulbertis.org/2011/10/synchronizing-a-mysql-database-with-git-and-git-hooks/

我使用的设置完全相同(当然,设置和路径取决于我的设置)。

网站报价:

让我们从预提交开始。预提交挂钩将在执行提交之前直接运行脚本。编辑预提交挂钩:

[your editor] /path/to/your/repo/.git/hooks/pre-commit

现在,让我们编写预提交脚本。我们将告诉系统将我们的MySQL数据库转储到我们的git存储库中,并添加它以进行提交。

#!/bin/sh
mysqldump -u [mysql user] -p[mysql password] --skip-extended-insert [database] > /path/to> /your/repo/[database].sql
cd /path/to/your/repo
git add [database].sql

现在,让我们编写合并后脚本。我们将告诉系统将MySQL转储恢复到本地数据库以获取最新的更改。用编辑合并后挂钩

[your editor] /path/to/your/repo/.git/hooks/post-merge

并写:

#!/bin/sh
mysql -u [mysql user] -p[mysql password] [database] < /path/to/your/repo/[database].sql

但当我先提交,然后提取时,似乎什么都不会发生。合并后和提交前的挂钩位于部署存储库的挂钩目录中,我从中进行提交和提取。两者都有执行权:chmod +x /path/to/hook

我已经测试了放置在钩子中的命令。它们应该正常工作。

有什么方法可以调试出了什么问题吗?

对于'post-merge',如果运行'git-pull'并且已经是最新的,则'1post-merge'hook将不会运行。

如果您的存储库中没有任何文件发生更改,那么">预提交"挂钩似乎会运行。只要确保脚本中的任何命令后面都没有空格。

这真的很令人失望,我希望看到一个">预拉"钩子和一个"预提交"钩子都能对存储库进行无所谓的更改。

再说一遍,我不是开发人员,所以我可能在这里错过了一些东西。

编辑:只是测试一下,以确保我得到了正确的答案。

相关内容

  • 没有找到相关文章