在操作系统上: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
我已经测试了我在钩子中放置的命令。他们应该正常工作。
任何调试错误的方法?
答案 0 :(得分:0)
对于“合并后”,如果您运行“ git pull ”并且已经是最新版,那么“合并后”'钩子不会跑。
如果您的存储库中没有文件发生更改,那么“预提交”挂钩似乎会运行。只需确保脚本中的任何命令后没有空格。
这真的很令人失望,我很乐意看到一个' pre-pull '钩子和一个' pre-commit '钩子,无论这些钩子都发生了变化库中。
然后,我不是开发人员,所以我可能会在这里遗漏一些东西。 。
编辑:只是测试一下,以确保我有正确的。