从git push发送参数

时间:2010-07-08 20:24:41

标签: git

我们正在使用git post-receive钩子来自动缩小我们的JS并同步我们的本地和远程开发数据库。

这通常是可取的,但有时不是。

无论如何都要将参数传递给git push的post-receive钩子,这样可以在需要时禁用它吗?

谢谢!

4 个答案:

答案 0 :(得分:5)

Git version 2.10(已于2016年9月2日发布)将--push-option添加到git push

-o
--push-option
     

将给定的字符串传送到服务器,服务器将它们传递给预接收和后接收挂钩。给定的字符串不得包含NUL或LF字符。

答案 1 :(得分:2)

如果保留post-receive hook,您可以决定根据每个文件的引用名称运行脚本。

  

这个hook [...]没有参数,但是对于每个ref都要更新它在标准输入上接收一行格式:

<old-value> SP <new-value> SP <ref-name> LF
  

其中:

     
      
  • <old-value>是存储在ref中的旧对象名称,
  •   
  • <new-value>是要存储在ref和
  • 中的新对象名称   
  • <ref-name>是参考号的全名。
  •   

因此,您可以检查ref-name中的分支名称,对于某些分支,决定不运行您的脚本。

答案 2 :(得分:1)

我会以另一种方式执行此操作,并保留一个具有receive-deploy操作的分支和另一个不具有receive-deploy操作的分支。

答案 3 :(得分:1)

没有直接机制将带外数据从 git push 传递到(例如)另一个存储库中的post-receive挂钩。

您必须使用传递的数据:

  • 推送的提交(提交消息或内容)。

    您可以根据推送提示提交(或任何推送提交)的提交消息中的特定字符串禁用缩小。使用内容本身(例如,提示树/任何推送提交中的文件)可能不太理想,因为缩小禁用/启用状态将是持久的(就像普通文件一样,除非您进行了更改,否则它不会改变明确地)。

    无论你采用哪种方式,基于提交的选项都有一个缺点,即每当你想要推动一个非自动缩小的树时(或者如果使用的话,将其打开和关闭)会用一些无关的“垃圾”来污染你的历史记录一个基于内容的开关)。

    如果您已经将缩小的代码保存回存储库,那么您已经在历史记录中添加了额外的内容,因此可能偶尔会包含一些不同的噪声来禁用缩小功能。

    您可以通过将检测限制为提示提交来消除污染,然后丢弃提示提交(如果它是“no minify”提交)。不幸的是,这对于推动满足“无缩小”条件的小费的人来说很有可能引起混淆。

  • 目的地引用名称。

    您可以安排推送brach-nominify同时更新branch,而不会引入任何历史污染。您必须小心不要回溯历史记录(例如,检查branch-nominify的新推送提示是否可用于快进更新branch)。

  • 您的服务器提供的特殊数据。

    根据您的Git服务器,您可能能够分辨出哪个用户正在推送。您可以简单地禁用一个特定用户的缩小。

    • gitolite提供GL_USER环境变量
    • 正常的基于SSH的访问可能提供USER环境变量