【发布时间】:2017-03-11 17:07:44
【问题描述】:
当我推送到 Github 上的 prod 分支时,我想编写一个 git 挂钩来运行一些 bash 脚本。我正在编写的 bash 实质上将使用 aws 命令行工具将我的应用程序的更新推送到 AWS。
我可以通过预推送来执行此操作还是有后推送?
【问题讨论】:
标签: git amazon-web-services githooks
当我推送到 Github 上的 prod 分支时,我想编写一个 git 挂钩来运行一些 bash 脚本。我正在编写的 bash 实质上将使用 aws 命令行工具将我的应用程序的更新推送到 AWS。
我可以通过预推送来执行此操作还是有后推送?
【问题讨论】:
标签: git amazon-web-services githooks
The githooks documentation 有所有钩子的完整列表,并且没有 post-push 钩子。你可以在你的 pre-push 钩子中做一些事情,但是有一个缺陷:你无法判断服务器是接受还是拒绝推送,因为你的 pre-push 钩子运行得太早了,让 你在他们看到之前就中止了推送。
最好的办法是将外部 git push 包装到一个脚本中:git push 的退出状态告诉你什么是成功的,和/或你可以查询远程(例如,通过 git ls-remote)并查看如果它的引用在推送后发生了变化。 (这有它自己的 post hoc ergo propter hoc 谬误实例,但可能适合您的目的。)
【讨论】:
post-receive 钩子在接收的 Git 中运行,而不是在推送的 Git 中运行。 GitHub 不会让你设置任意的 post-receive 钩子,因为这会让你过多地访问他们的计算机。它们确实允许在接收后执行一组非常有限的操作,但这通常是解决 OP 想要解决的问题的错误方法。