Git:用 'post-receive'命令发送参数到 'git push' hook

标签 git deployment hook githooks git-push

我已经在服务器上配置了一个 post-receive Hook 脚本,以便使用 Git 进行自动部署,如示例中所述 here .

因此,当我在本地 PC 上向生产服务器发送推送时:

git push production master

post-receive Hook 被触发,将存储库的内容复制到 live 目录中。

我的问题是,当我发送推送时,是否有一些方法可以将一些参数传递给 post-receive Hook ?

像这样:

git push production master --params="clear-the-cache=1"

然后在 Hook 中我可以读取 'clear-the-cache=1' 参数并执行其他操作。

有办法吗?

最佳答案

编辑:Git 版本 2.10.0 添加了一个新的 --push-option (又名 -o ) git push 的参数,它提供了一种非常干净的方法来执行此操作。 Thanks to Steve Coffman for reminding me.服务器和客户端都需要在 2.10.0 或更高版本;提供的选项,每一个 -o--push-option参数,然后作为参数传递给预接收和后接收 Hook 。


不干净。有一些方法可以提供侧 channel ,但我认为它们都很丑陋。

考虑每个 git push压入一个或多个引用标签。如果您每次至少推送两个标签,其中一个标签可以指向携带附加信息的对象(提交、标签等)。附加信息的形式由您决定。

Git 通常不允许您推送任意引用空间名称,例如 refs/sidechannel :

remote: error: refusing to create funny ref 'refs/sidechannel' remotely
 ! [remote rejected] refs/sidechannel -> refs/sidechannel (funny refname)

(虽然我无意中发现 github 认为这意味着创建一个名为 refs/sidechannel分支。奇怪。)无论如何,这意味着通常,您必须使用分支或标签名称.例如:

git push production master sidechannel

在您的接收后脚本中,您可以检查 refs/heads/sidechannel 的更新并随心所欲地处理它们(包括提取信息,然后删除分支)。

或者,您可以在提交消息中使用普通的注释标签或特殊格式的文本来提供边信道数据。或者,自 refs/notes现在是公认的 namespace ,请使用 refs/notes/<em>name</em>作为侧 channel 的名称。

关于Git:用 'post-receive'命令发送参数到 'git push' hook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37360442/

相关文章:

tomcat - 将 Grails 2.1.1 应用程序部署到 Tomcat 作为一场爆炸 war ?

c++ - 查找句柄打开的位置

C# Opengl Hook Swapbuffer 添加插值帧

c++ - 函数指针 - DInput8.dll Hook 代码参数的用途

linux - 更改文件创建时的 Linux 用户默认所有权?

git - 硬链接(hard link)会被破坏吗?

c++ - 这些辅助文件应该在 Git 版本控制之下吗?

windows - 更新Windows文件夹中的所有git repos

visual-studio - 在Visual Studio数据库项目中,有没有一种方法可以在部署期间排除某些对象?

c++ - 使用 cmake ExternalProject_Add 将 github 库(BamTools)添加到 c++