标签: git-post-receive

用于网站登台的Git Post-Receive Hook

我正在尝试设置Git来暂存我的网站,以便我可以git pull让当前版本在本地工作,然后git push将更改推送到远程服务器.我已经设置它以便按照我想要的方式工作,但是在我推动之后,我必须手动运行git checkout -fgit reset --hard HEAD在远程服务器上运行.

我已经尝试将这些作为服务器上的post-receive挂钩添加到shell脚本中,但它似乎没有任何效果.我知道脚本正在运行,因为我在推送后看到"更改推送到服务器".这是post-receive钩子:

#!/bin/sh
git reset --hard HEAD
echo "Changes pushed to server."
Run Code Online (Sandbox Code Playgroud)

git git-post-receive

59
推荐指数
5
解决办法
6万
查看次数

如何测试git hooks

由于"测试"是Git钩子的常用用途,我的问题很难搜索.

我正在编写一个相当复杂的git post-receive hook,想知道测试它的最佳方法是什么.目前我的流程是:

  • 在虚拟"远程"仓库中进行后期接收更改
  • 更改虚拟本地仓库
  • 在虚拟本地回购中提交更改
  • 将更改推送到虚拟远程仓库

有没有更简单的方法来测试这个?理想情况下它看起来像:

  • 在虚拟回购中进行更改后更改
  • 发出"magic"命令来测试post-receive

也许我可以"重新发布"之前的推送,或者让远程仓库表现得像是刚刚收到特定哈希的推送?

git git-post-receive

35
推荐指数
3
解决办法
1万
查看次数

在git push上重置

我有一个post-receive钩子脚本坐在我正在推动的远程仓库上 git reset --hard

像这样的东西:

$ git push opal
Counting objects: 74, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (45/45), done.
Writing objects: 100% (53/53), 16.68 KiB, done.
Total 53 (delta 20), reused 0 (delta 0)
remote: warning: updating the current branch
remote: HEAD is now at 88f1e35 tweak lavalamp styles
Run Code Online (Sandbox Code Playgroud)

我在这里不明白的是 - 遥控器说头部现在在XXX但是当我登录服务器时 - 远程工作副本根本没有更新!

任何的想法?

git hook reset git-post-receive

15
推荐指数
3
解决办法
7336
查看次数

无法从Git post-receive hook中检测到分支

我在远程仓库上有一个post post hook挂钩设置,试图确定传入推送的分支名称,如下所示:

$branch = `git rev-parse --abbrev-ref HEAD`
Run Code Online (Sandbox Code Playgroud)

但是,我发现,无论我从我的$ branch变量推送什么分支都设置为'master'.

有任何想法吗?

git hook git-post-receive

15
推荐指数
2
解决办法
7227
查看次数

Jenkins和GitHub webhook:HTTP 403

我有一个GitHub存储库,我想通过post-receive钩子通知Jenkins新的提交.我已经将GitHub插件安装到Jenkins中,并允许Jenkins管理它自己的钩子URL.该项目具有正确的git存储库URL,并被指示"在将更改推送到GitHub时构建".当我有GitHub发送测试有效负载时,我在前面的Jenkins的nginx网络服务器中找到了这个:

207.97.227.233 - - [15/Sep/2011:07:36:51 +0000] "POST /github-webhook/ HTTP/1.1" 403 561 "-" "-"
Run Code Online (Sandbox Code Playgroud)

我正在运行SSL,所以我禁用它无效.我是否需要在权限矩阵中为匿名用户提供特殊权限?

请原谅缺少配置文件:我很乐意分享可能存在的内容,但我不知道分享可能有用的内容.

hudson github nginx git-post-receive jenkins

14
推荐指数
2
解决办法
2万
查看次数

Git post-receive hook无效

我们使用带有中央仓库的git(使用Gitosis).我已经创建了一个post-receive挂钩,只要将更改推送到中央存储库,就会生成一封发送到dev邮件列表的电子邮件,并从git repo中的文档文件夹生成文档.

因此,在~git /我有一个目录,我们称之为'a',其中包含git repo的克隆.后接收挂钩看起来像:

#!/bin/bash
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
( cd ~git/a && git pull &> ~git/pull_log.log && php ~git/a/scripts/generate_markdown_documentation.php &> ~git/doc_log.log )
Run Code Online (Sandbox Code Playgroud)

电子邮件脚本正在运行,但文档生成却没有.pull_log.log的内容是:

fatal: Not a git repository: '.'
Run Code Online (Sandbox Code Playgroud)

这让我觉得它没有改变到上面脚本第5行的正确目录.我错了吗?我怎样才能让它发挥作用?

编辑:我已按照回复中的建议更新了post-receive hook.该脚本现在是:

#!/bin/bash
function die {
  echo "$*" >&2; exit 1
}

function checkgit {
  [ -d "$1/.git" ] || die "$1 could not possibly be a git repo; $1/.git is not a dir"
}


cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
( set -x
checkgit …
Run Code Online (Sandbox Code Playgroud)

git bash gitosis githooks git-post-receive

12
推荐指数
1
解决办法
1万
查看次数

Git:post-receive电子邮件钩子显示html格式的颜色差异?

我有一个使用Git的接收后电子邮件挂钩发送电子邮件(感谢这个SO帖子),但它发送的电子邮件只是纯文本.我想要一些更丰富多彩,格式更好的东西.

是否有一个脚本或我可以使用post-receive钩子运行的东西,它将发送一个格式良好的差异电子邮件,而不是纯文本的?

git formatting diff git-post-receive

11
推荐指数
1
解决办法
2451
查看次数

如果第二次推送只有第一次推送的快进,那么并发git推送是否总是安全的?

我想自动将后接收挂钩中的提交从我们LAN上的中央仓库推送到云中的另一个中央仓库.LAN repo使用git clone --mirror git@cloud:/path/to/repo或等效命令创建.

因为提交的文件相对于我们的上游带宽会很大,所以完全有可能发生这样的事情:

  1. Alice启动了对LAN repo的推送.
  2. 在收件后挂钩运行时,Bill从LAN repo中拉出来.
    • 局域网回购正在推动云回购.
    • 这也意味着Bill的本地仓库包含Alice推送的提交.通过测试确认.
  3. 比尔开始推动局域网回购.
    • 比尔的推动是爱丽丝推进的快速前进,因此局域网回购将接受它.

当LAN repo的后接收挂钩执行时,将从LAN repo到cloud repo的第二次推送开始,并且两者将同时运行.

我并不担心git对象.最糟糕的情况是两个推送都会从Alice的推送中上传所有对象,但就我理解git的内部结构而言,这应该无关紧要.

我很担心裁判.假设Alice推动使用更慢的连接,因此Bill的推送首先完成.假设数据包丢失或其他原因导致挂钩从局域网仓库推送到Bill的推送云完成,然后钩子从局域网回购推送到Alice的推送云.如果Alice和Bill都在推动主分支并且Bill的推送首先完成,那么主要参与者将在云回购中做什么?我希望它成为比尔的头,因为那是后来的推动,但我担心这将是爱丽丝的头.

进一步澄清:

我意识到,如果比尔从他的机器推送到局域网回购完成,那么爱丽丝从她的机器到局域网回购的推动将会失败.在这种情况下,LAN repo的post-receive挂钩将不会执行.此外,请假设没有人会进行强制推送,因此如果后续接收挂钩在LAN repo上运行,则所有参考更改都是快进的.

git backup concurrency automated-tests git-post-receive

11
推荐指数
1
解决办法
1864
查看次数

当Github收到更新时,将其推送到远程服务器

让Github自动将任何更新推送到远程服务器的设置是什么?

这对于在Github上维护代码库以及让网站运行该代码库非常有用.

  1. 我在自己的电脑上有我的回购,这是我工作的地方.

  2. 我对我的本地仓库进行了更改,并将它们推送到我的Github仓库.

  3. 我希望我的Github repo然后将这些更改推送到我的远程服务器.

我整天都在研究,使用'钩子'听起来很合理.也许在Github上使用'post-receive'钩子,然后向我的远程服务器运行push命令.

有什么建议?

git deployment amazon-ec2 githooks git-post-receive

11
推荐指数
2
解决办法
4723
查看次数

接收端不支持推送选项

起初我的服务器的git版本是2.7.4,错误是准确的.然而,之后,我更新并使用git版本确认了这一点:

服务器

$ git --version  
git version 2.13.0
Run Code Online (Sandbox Code Playgroud)

客户

$ git --version  
git version 2.11.0 (Apple Git-81)
Run Code Online (Sandbox Code Playgroud)

然而,当我试图推动这种情况时:

$ git push --push-option=test  
fatal: the receiving end does not support push options  
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

即使根据文档,这应该在客户端版本和服务器版本中都受支持:
2.11.0
2.13.0

我甚至在每个上创建了两个新的本地存储库,然后尝试从另一个本地存储库推送到另一个本地存储库(因此它甚至不在另一个服务器之间进行通信)但我仍然遇到了这个错误.有什么我必须启用?我无法找到关于必须在文档上执行此操作的任何内容.

git githooks git-post-receive

10
推荐指数
1
解决办法
1880
查看次数