即使我没有要推送的新提交,如何强制在服务器上git
运行挂钩?post-receive
背景
我使用 git 自动将网站部署到服务器。我在服务器的受保护区域中有一个裸仓库,还有一个post-receive
挂钩,可以检查内容并将某些文件系统地复制到public_html
文件夹中。(受本教程启发)
我厌倦了post-receive
在服务器上手动修改钩子,所以我的post-receive
钩子现在实际上从 repo 复制了一个新版本:
#!/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
钩子时都需要我伪造一个新的提交。有没有办法在post-receive
不伪造提交或ssh
ing 的情况下调用钩子?
我试过的
git push
git push -f