【问题标题】:Git: send parameters to 'post-receive' hook with the 'git push' commandGit:使用“git push”命令将参数发送到“post-receive”挂钩
【发布时间】:2016-09-18 12:44:22
【问题描述】:

我在服务器上配置了一个 post-receive 挂钩脚本,用于使用 Git 自动部署,例如 here 所述。

所以,当我在本地 PC 上时,我会在生产服务器上发送推送:

git push production master

post-receive 钩子被触发,复制实时目录中存储库的内容。

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

类似这样的:

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

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

有办法吗?

【问题讨论】:

标签: git deployment hook githooks git-push


【解决方案1】:

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


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

考虑每个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/sidechannelbranch。奇怪。)无论如何,这意味着通常,您必须使用分支或标记名称.例如:

git push production master sidechannel

然后,在您的接收后脚本中,您可以检查对refs/heads/sidechannel 的更新并对它们进行任何您喜欢的操作(包括提取信息,然后删除分支)。

或者,您可以在提交消息中使用普通的带注释标签或特殊格式的文本来提供旁通道数据。或者,由于 refs/notes 现在是可识别的名称空间,因此使用 refs/notes/<em>name</em> 作为边通道的名称。

【讨论】:

  • 设置这个对我来说似乎很复杂,但我会尝试你的解决方案。谢谢。
  • 您可以考虑ElpieKay's suggestion,这可能更简单。例如,一个名为.params 的文件将从普通视图中隐藏。我不确定这里有什么好的解决方案;这些都是具有不同权衡的糟糕解决方案。 :-)
  • 如果您使用的是 git 2.10 或更新版本,您可能会发现 git push-option 很有帮助
猜你喜欢
  • 2015-08-28
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多