首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >强制git运行post-receive挂钩,即使一切都是“最新的”

强制git运行post-receive挂钩,即使一切都是“最新的”
EN

Stack Overflow用户
提问于 2012-12-03 12:26:30
回答 5查看 23.1K关注 0票数 74

即使我没有推送新的提交,如何强制git在服务器上运行post-receive钩子?

背景

我使用git自动将网站部署到服务器。我在服务器的受保护区域中有一个空的repo,还有一个post-receive钩子,它签出内容并系统地将某些文件复制到public_html文件夹中。(灵感来自this tutorial)

我厌倦了在服务器上手动修改post-receive钩子,所以我的post-receive钩子现在实际上从存储库复制了自己的一个新版本:

代码语言:javascript
复制
#!/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挂钩?

我尝试过的

代码语言:javascript
复制
git push
git push -f
EN

回答 5

Stack Overflow用户

发布于 2014-08-07 08:25:55

我知道这可能会被认为是“危险的”,但我喜欢生活在边缘。

我只需删除远程分支,然后再次推送它。首先确保您当地的分支机构是最新的,以限制丢失物品的机会。

因此,如果我想触发post-receive,在我的例子中是为了让测试分支进行配置,我所要做的就是:

代码语言:javascript
复制
$ git push origin :testing
$ git push origin testing

但是,不要接受这个作为答案。这更像是一件仅供参考的事情。

票数 25
EN

Stack Overflow用户

发布于 2016-09-08 08:10:51

我试过empty commitsdelete upload branch

但是,直接使用ssh命令又如何呢:

代码语言:javascript
复制
ssh your_host /path/to/your_repo/hooks/post-receive
票数 3
EN

Stack Overflow用户

发布于 2017-12-06 01:24:57

在我的例子中,我登录到remote并运行:

$ sh project.git/hooks/post-receive

工作正常!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13677125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档