挂钩在git pull上创建/添加数据库转储文件到存储库

时间:2011-06-05 13:41:54

标签: database git hook

我的目标是尽量减少本地克隆我的网站+数据库所需的步骤。

我在网络服务器上有一个中央git 存储库和一个本地克隆。当我在本地计算机上提取更新时,不仅应该从远程存储库获取最新的文件版本,而且还应该在此Web服务器上运行脚本以转储实时数据库,并在提供拉动之前将其添加到存储库。 / p>

我的猜测是,当我在交付存储库之前在本地计算机上激活git pull时,我需要在远程计算机上执行以下操作:

  • 创建数据库转储文件,例如dump.sql(通过exectuting mysqldump)
  • 将dump.sql添加到存储库
  • 将dump.sql提交到存储库

...然后才将拉力传递给本地机器。

我应该使用什么样的git hook? 我也很感激有这种情况的任何额外经验。

1 个答案:

答案 0 :(得分:0)

git help hooks列出了钩子的类型以及它们的工作方式,但是没有一个钩子可以用来做你想做的事情(你需要像pre-upload那样会被执行的git-upload-pack)。

但是,您可以在服务器上的git-upload-pack周围创建一个包装器脚本,执行必要的操作,然后执行真正的git-upload-pack命令:

  1. 找到git-upload-pack可执行文件
  2. 将其重命名为git-upload-pack.real
  3. git-upload-pack中的某处创建一个名为PATH的新脚本,执行以下操作:
    1. 使用参数查找Git存储库
    2. cd进入Git存储库
    3. 如果hooks/pre-upload存在并且是可执行文件:
      1. 运行它
      2. 如果挂钩退出时为非零状态:
        1. 将错误消息打印为标准错误
        2. 以非零返回值退出
    4. 使用原始命令行参数
    5. 运行git-upload-pack.real
  4. 在您的Git存储库中创建一个hooks/pre-upload脚本,可以执行您想要的任何操作