即使我没有推送新的提交,如何强制git
在服务器上运行post-receive
钩子?
背景
我使用git自动将网站部署到服务器。我在服务器的受保护区域中有一个空的repo,还有一个post-receive
钩子,它签出内容并系统地将某些文件复制到public_html
文件夹中。(灵感来自this tutorial)
我厌倦了在服务器上手动修改post-receive
钩子,所以我的post-receive
钩子现在实际上从存储库复制了自己的一个新版本:
#!/bin/sh
rm -rf ~/../protected/*
GIT_WORK_TREE=~/../protected git checkout -f
# Rewrite over this file with any updates from the post-receive file
cp ~/../protected/post-receive hooks/post-receive
# Delete public_html
# Copy stuff public_html
当然,问题是新的post-receive
钩子永远不会运行。一个看似简单的解决方案只是再次推送,但现在一切都已经是最新的。这很烦人,因为它要求我在每次更新post-receive
钩子时都要伪造一个新的提交。有没有一种方法可以在不伪造提交或ssh
的情况下调用post-receive
挂钩?
我尝试过的
git push
git push -f
发布于 2014-08-07 08:25:55
我知道这可能会被认为是“危险的”,但我喜欢生活在边缘。
我只需删除远程分支,然后再次推送它。首先确保您当地的分支机构是最新的,以限制丢失物品的机会。
因此,如果我想触发post-receive,在我的例子中是为了让测试分支进行配置,我所要做的就是:
$ git push origin :testing
$ git push origin testing
但是,不要接受这个作为答案。这更像是一件仅供参考的事情。
发布于 2016-09-08 08:10:51
我试过empty commits和delete upload branch。
但是,直接使用ssh命令又如何呢:
ssh your_host /path/to/your_repo/hooks/post-receive
发布于 2017-12-06 01:24:57
在我的例子中,我登录到remote并运行:
$ sh project.git/hooks/post-receive
工作正常!
https://stackoverflow.com/questions/13677125
复制相似问题