“提供”(也是“重新部署”)git hook的最佳实践?

时间:2015-12-29 16:12:26

标签: git deployment

我希望能够在我的项目文件夹中以两种方式调用git钩子:

  1. 将代码更新为最新版本,我将其称为 Soft Deploy
  2. 配置空目录(或重新部署),我将其称为 Hard Deploy
  3. 大部分时间都使用 Soft Deploy 。它只是在我的Dev服务器上用git pull更新代码。 git钩子显然是合并后

    Hard Deploy 是我感到困惑的地方。有时我想重新部署项目。这是一个例子:我希望我的Dev服务器刷新其数据库并用虚拟数据重新设置它。我不想在每次git pull上执行此flush,只需要 Hard Deploy 。在git语法中,这可能是resetcheckout,也可能是git pull -f。我想如果git语法在一般开发人员的脑海中自然等同于 Hard Deploy 。也许硬重置会让人觉得重新部署?虽然在初始git checkout上发生的事情是必要的,并且硬重置不是普通开发人员在第一次结账后运行的事情。

    我的想法 post-checkout 可能是关注 Hard Deploy 的最佳方法。主要的问题是,当我在git checkout mastergit checkout develop的本地开发环境中的分支之间跳转时,我不希望它重新播放和放大每次重新记录所有。我宁愿没有3-hook解决方案:'deploy','update','re-deploy'。拥有'部署'和放大器会很高兴。为了简单起见,“重新部署”使用相同的钩子。

    所以这是我的确切问题:当我想要 Hard Deploy (而不是 Soft Deploy )我的项目时,我应该使用什么git hook?< /强>

1 个答案:

答案 0 :(得分:1)

没有钩子可以让你轻松区分你的两个用例 - 在钩子里你无法访问传递给git的命令行开关。最简单的方法可能是在您的存储库内部或旁边放一个小的shell脚本,并将其用于硬部署。

如果你想添加一些“语法糖”,你可以在git中定义别名。以下是在存储库中本地添加别名的示例:

/// delays the execution of the passed function
func delay(delay: Double, closure: ()->()) {
    dispatch_after(
        dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC))),
        dispatch_get_main_queue(),
        closure)
}

// calling directly (locationManager gets captured; which is in this case negligible to consider)
delay(5.0, closure: locationManager.stopUpdatingLocation)

// or indirect through your function
delay(5.0, closure: stopGettingLocation)

git config alias.harddeploy '!~/bin/myproject-harddeploy' 告诉git运行外部命令而不是git子命令。)

然后,用户可以只运行!