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

时间:2012-09-24 22:36:59

标签: git bash sync mysqldump githooks

在操作系统上: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

但是当我做出提交然后拉动时,似乎没有任何事情发生。合并后和预提交挂钩驻留在部署存储库的hooks目录中,我从中执行提交和拉取。两者都有执行权:chmod +x /path/to/hook

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

任何调试错误的方法?

1 个答案:

答案 0 :(得分:0)

对于“合并后”,如果您运行“ git pull ”并且已经是最新版,那么“合并后”'钩子不会跑。

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

这真的很令人失望,我很乐意看到一个' pre-pull '钩子和一个' pre-commit '钩子,无论这些钩子都发生了变化库中。

然后,我不是开发人员,所以我可能会在这里遗漏一些东西。 。

编辑:只是测试一下,以确保我有正确的。