我希望能够在我的项目文件夹中以两种方式调用git钩子:
大部分时间都使用 Soft Deploy 。它只是在我的Dev服务器上用git pull
更新代码。 git钩子显然是合并后。
Hard Deploy 是我感到困惑的地方。有时我想重新部署项目。这是一个例子:我希望我的Dev服务器刷新其数据库并用虚拟数据重新设置它。我不想在每次git pull上执行此flush,只需要 Hard Deploy 。在git语法中,这可能是reset
或checkout
,也可能是git pull -f
。我想如果git语法在一般开发人员的脑海中自然等同于 Hard Deploy 。也许硬重置会让人觉得重新部署?虽然在初始git checkout
上发生的事情是必要的,并且硬重置不是普通开发人员在第一次结账后运行的事情。
我的想法 post-checkout 可能是关注 Hard Deploy 的最佳方法。主要的问题是,当我在git checkout master
和git checkout develop
的本地开发环境中的分支之间跳转时,我不希望它重新播放和放大每次重新记录所有。我宁愿没有3-hook解决方案:'deploy','update','re-deploy'。拥有'部署'和放大器会很高兴。为了简单起见,“重新部署”使用相同的钩子。
所以这是我的确切问题:当我想要 Hard Deploy (而不是 Soft Deploy )我的项目时,我应该使用什么git hook?< /强>
答案 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子命令。)
然后,用户可以只运行!
。