'provision'(还有 're-deploy')git 挂钩的最佳实践?

Best practice for a 'provision' (also 're-deploy') git hook?

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

  1. 将代码更新到最新版本,我称之为 Soft Deploy
  2. 提供空目录(或重新部署),我称之为 Hard Deploy

A Soft Deploy 大部分时间都在使用。它只是用 git pull 更新我的开发服务器上的代码。 git 挂钩显然是 post-merge.

A Hard Deploy 是我感到困惑的地方。有时我想重新部署项目。这是一个示例:我希望我的开发服务器刷新其数据库并用虚拟数据重新播种。我不想在每次 git 拉取时都执行此刷新,只希望 硬部署 。在 git 语法中,这可能是 resetcheckout,或者可能是 git pull -f。我希望 git 语法在普通开发人员的头脑中自然等同于 Hard Deploy。也许硬重置会让人想到重新部署?虽然在初始 git checkout 上发生的某些事情是必要的,并且硬重置不是普通开发人员在第一次结帐后 运行 会做的事情。

我的想法是 post-checkout 可能是 Hard Deploy 的最佳挂钩。那里的主要问题是,当我使用 git checkout mastergit checkout develop 在本地开发环境的分支之间跳转时,我不希望它重新播种并重新缓存所有内容 每次 .我宁愿没有 3 钩解决方案:'deploy'、'update'、're-deploy'。为简单起见,让 'deploy' 和 're-deploy' 使用相同的钩子会很好。

所以这是我的确切问题:当我想 Hard Deploy 时,我应该使用什么 git 钩子(而不是 软部署) 我的项目?

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

如果要添加一些"syntactic sugar",可以在git中定义别名。下面是在您的存储库中本地添加该别名的示例:

git config alias.harddeploy '!~/bin/myproject-harddeploy'

! 告诉 git 运行 一个外部命令而不是 git 子命令。)

用户可以 运行 git harddeploy.