2

在操作系统上:Ubuntu 12.04

我的服务器上有一个 drupal 部署(实时网站)和一个登台环境(测试网站)。每次我从暂存网站中提取更改时,我都想自动同步数据库,如下所示:http: //ben.kulbertis.org/2011/10/synchronizing-a-mysql-database-with-git-and-git -钩子/

我使用的设置完全相同(当然,设置和路径根据我的设置)。

引自网站:

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

[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

但是当我先提交然后再拉时,似乎什么都没有发生。post-merge 和 pre-commit 挂钩位于部署存储库的 hooks 目录中,我从中执行提交和拉取。两者都有执行权:chmod +x /path/to/hook

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

有什么办法可以调试出什么问题?

4

1 回答 1

0

对于“ post-merge ”,如果您运行“ git pull ”并且已经是最新的,那么“ post-merge ”钩子将不会运行。

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

这真的很令人失望,我很想看到一个 ' pre-pull ' 钩子和一个 ' pre-commit ' 钩子,无论对存储库的更改如何,它们都会运行。

再说一次,我不是开发人员,所以我可能在这里遗漏了一些东西。. .

编辑:只是测试这个以确保我得到了正确的。

于 2013-01-30T18:27:41.330 回答