我们正在使用git post-receive钩子来自动缩小我们的JS并同步我们的本地和远程开发数据库。
这通常是可取的,但有时不是。
无论如何都要将参数传递给git push的post-receive钩子,这样可以在需要时禁用它吗?
谢谢!
答案 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服务器,您可能能够分辨出哪个用户正在推送。您可以简单地禁用一个特定用户的缩小。