Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
推送到已签出的分支,然后执行git hook_Git_Githooks_Git Push - Fatal编程技术网

推送到已签出的分支,然后执行git hook

推送到已签出的分支,然后执行git hook,git,githooks,git-push,Git,Githooks,Git Push,我一直在我的远程GitHub上设置一些Git钩子,似乎我陷入了两难境地 我有一个钩子,它调用一个Makefile在我的Git存储库中部署我的web应用程序,并且当检测到push to master时,钩子执行post更新。但是,推送到远程存储库的签出分支是没有好处的,否则将失败。建议在推送时使用裸存储库。但是,如果存储库是空的,那么我的Git钩子就不能正确执行,因为所有文件本质上都是blob 解决此问题的方法有哪些?我总是可以推送一个分支并将其合并到master中(有一个合并后钩子而不是更新后钩

我一直在我的远程GitHub上设置一些Git钩子,似乎我陷入了两难境地

我有一个钩子,它调用一个Makefile在我的Git存储库中部署我的web应用程序,并且当检测到push to master时,钩子执行post更新。但是,推送到远程存储库的签出分支是没有好处的,否则将失败。建议在推送时使用裸存储库。但是,如果存储库是空的,那么我的Git钩子就不能正确执行,因为所有文件本质上都是blob


解决此问题的方法有哪些?我总是可以推送一个分支并将其合并到master中(有一个合并后钩子而不是更新后钩子),但这将需要SSH到我的服务器中进行合并,并且违背钩子的全部要点

您的情况是允许推送是可配置的。

我可以有一个钩子,在更新之前签出另一个分支,但签出分支意味着更改根目录文件,这将需要删除(或移动)正在运行的程序的二进制文件。我的意思是,您想在推送钩子上签出。无论您是对存储库配置的工作树和索引执行此操作,还是让钩子提供一个,都无关紧要。在钩子中配置receive.denycurrentbranch false并执行git reset--hard,就完成了。这是最简单的。我不喜欢每次按“git reset--hard”键,而且,这看起来像是一次黑客攻击。我将尝试将我的源代码重置为裸repo,并将裸repo本地克隆到工作目录中,并通过post-update钩子进行部署。对我来说,这似乎是最明智的选择。无论你做什么,都会对某些签出产生影响,而git reset--hard会对这个签出产生影响,否则它就错了。