标签: git-post-receive

git post-receive工作不正常

我有以下问题.我已将'post-receive'更新为cd到某个目录,然后将repo拉进去进行部署,如下所示:

#!/bin/bash
cd /var/www/site
git pull origin master
Run Code Online (Sandbox Code Playgroud)

但是每当我在本地机器上执行'git push origin master'时,我会得到以下结果:

Counting objects: 5, done.
Delta compression using up to 2  threads.
(etc..)
remote: fatal: Not a git repository: '.'
Run Code Online (Sandbox Code Playgroud)

然而,当我手动cd到/var/www/site并做git pull origin master它出色的工作.

git git-post-receive

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

github服务挂钩和基本身份验证

我正在试图弄清楚如何为github服务挂钩保护webhook接收器.

在github手册页中,当您查看github钩子将来自哪个IP地址的部分时,它会出现以下警告:

"我们强烈建议您不要使用Service Hooks的白名单IP.而是设置HTTPS和基本身份验证来验证传入请求."

在关于post post hooks的文档中,我没有看到任何设置基本身份验证的方法.

如何通过github post-recieve/service/web hook使用基本身份验证,通知我提交到存储库?

github webhooks git-post-receive

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

Git Push to Rails Production给出响应你的Ruby版本是1.9.3,但你的Gemfile指定2.2.2当Ruby Version是2.2.2

我到处都看到了这个错误,但我发现的解决方案都没有帮助解决这个问题.我正在Mac上本地开发一个rails应用程序,并在DigitalOcean上设置了一个Droplet来推送应用程序.我的Droplet正在运行Ubuntu 14,我正在使用Git post-receive hook进行部署.这是钩子:

#!/bin/bash

GIT_DIR=/home/xxx/yyy_production
WORK_TREE=/home/xxx/yyy
export XXX_DATABASE_USER='xxx'
export XXX_DATABASE_PASSWORD='12345'

export RAILS_ENV=production
. ~/.bashrc

while read oldrev newrev ref
do
    if [[ $ref =~ .*/master$ ]];
    then
        echo "Master ref received.  Deploying master branch to production..."
        mkdir -p $WORK_TREE
        git --work-tree=$WORK_TREE --git-dir=$GIT_DIR checkout -f
        mkdir -p $WORK_TREE/shared/pids $WORK_TREE/shared/sockets $WORK_TREE/shared/log

        # start deploy tasks
        cd $WORK_TREE
        bundle install
        rake db:create
        rake db:migrate
        rake assets:precompile
        sudo restart puma-manager
        sudo service nginx restart
        # end deploy tasks
        echo "Git hooks deploy complete" …
Run Code Online (Sandbox Code Playgroud)

rvm git-post-receive gem-bundler ruby-on-rails-4 ubuntu-14.04

9
推荐指数
1
解决办法
186
查看次数

Git post-receive hook无效

我的设置是一个Windows XAMPP服务器,启用了cURL,并安装了Git和Hudson.Hudson每分钟都会调查Git来查找更改,如果找到它们,它会创建一个构建版本.我使用这个版本作为我的测试服务器.这很好用.

我想在我的中央远程存储库上设置一个post-receive hook,它运行Hudson的force build功能.

我在我的中央Git存储库的hooks目录中创建了一个名为"post-receive"的post-receive文件,该文件是从开发人员的本地分支推送到的.他们每个都推送到中央存储库中的自己的分支.我想在每次推送后立即运行post-receive构建,而不是每分钟都有Hudson轮询Git.

当我打开一个shell到远程服务器并在hooks文件夹中运行"post-receive"时,它会运行.当人们从本地存储库副本推送到中央存储库副本时,它就不会被调用.

也许我不是在解释这个问题,但这就是我对Git的理解.

收到后代码是两行:

#!/bin/sh
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken
Run Code Online (Sandbox Code Playgroud)

再一次,当我打开一个shell并运行它时,它可以工作,但是当有人推动它时,没有任何反应,直到一分钟或更短的时间过去,Hudson意识到Git已经改变,然后它就会构建.

我很乐意澄清是否需要.任何帮助是极大的赞赏.

编辑:玩了之后,我觉得也许后续接收没有执行,因为参考没有被更新的东西?git文档说

在更新所有引用后,它将在远程存储库上执行一次.

这是否意味着如果没有更新,它将不会执行?如果是这样,我很确定事情正在更新,所以它不应该适用.

这是我的过程:在本地进行编辑.提交编辑.从我的HEAD推送到名为'mybranch'的远程分支(不是主分支,已检出)这是我希望我的钩子执行的点.

git curl hudson githooks git-post-receive

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

git post-receive hook无法跳回原来的cwd

当推送到我们的共享裸存储库(通过ssh)时,后提交无法正常工作.
这是很常见的,因为我在很多线程发现这里并能正常工作在同一台服务器,它驱动我疯了另外两个仓库.

#!/bin/sh
GIT_WORK_TREE=/ab/cd/staging git checkout -f
Run Code Online (Sandbox Code Playgroud)

存储库本身与钩子要检出的目录位于同一目录中

/ab/cd/barerepo
Run Code Online (Sandbox Code Playgroud)

推送时,它不会将文件签出到预期路径,但会显示以下错误消息:

Writing objects: 100% (3/3), 299 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
fatal: Could not jump back into original cwd
error: hooks/post-receive exited with error code 128
Run Code Online (Sandbox Code Playgroud)

我找不到任何关于这意味着什么的信息.(只要我知道,谷歌只会提交对git本身贡献的提交).所以我读了,猜到并试过......

  • 另外在post-receive hook中设置GIT_DIR
  • 使用--git-dir =/ab/cd/barerepo重新初始化裸仓库 - working-dir =/ab/cd/staging
  • 在barerepo/config中手动设置工作目录
  • 设置裸仓库并提交
  • 通过克隆设置裸仓库

现在配置看起来像这样

[core]
     repositoryformatversion = 0
     filemode = true
     bare = true
Run Code Online (Sandbox Code Playgroud)

但我也有这个(不费力)

[core]
    repositoryformatversion = 0
    filemode = true
    bare = true
    sharedrepository = 1
    worktree = /ab/cd/staging
    logallrefupdates …
Run Code Online (Sandbox Code Playgroud)

git git-post-receive

8
推荐指数
3
解决办法
2965
查看次数

GitLab 5.2 Post-Receive WebHook

我在与生产网络服务器相同的服务器上运行GitLab v5.2(/ var/www中的Document Root).

我正在尝试设置一个标准的GitLab Post-Receive Hook,但我发现很少有关于如何设置脚本来处理发布的JSON数据的信息.我不打算做任何自定义的事情,只是开箱即用,我想在我的网站位置接收后接收数据(请记住在同一台服务器上),然后在收到时从origin-master拉出(提供后接收数据源于推送到主分支).这样,在/ var/www中找到的网站总是与主人相同.

有人可以,从帖子数据中给我一个拉动脚本的例子,或者指向我正确的方向让我创建一个?

GitLab Hook请求示例 - 对于那些没有GitLab实例的人,这里是GitLab Post-Receive JSON数据的样子(直接来自GitLab帮助)

{
 "before": "95790bf891e76fee5e1747ab589903a6a1f80f22",
 "after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
 "ref": "refs/heads/master",
 "user_id": 4,
 "user_name": "John Smith",
 "repository": {
   "name": "Diaspora",
   "url": "git@localhost:diaspora.git",
   "description": "",
   "homepage": "http://localhost/diaspora",
 },
 "commits": [
   {
     "id": "b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
     "message": "Update Catalan translation to e38cb41.",
     "timestamp": "2011-12-12T14:27:31+02:00",
     "url": "http://localhost/diaspora/commits/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327",
     "author": {
       "name": "Jordi Mallach",
       "email": "jordi@softcatala.org",
     }
   },
   // ...
   {
     "id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
     "message": "fixed readme",
     "timestamp": "2012-01-03T23:36:29+02:00",
     "url": "http://localhost/diaspora/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7",
     "author": {
       "name": "GitLab dev user", …
Run Code Online (Sandbox Code Playgroud)

git json webhooks git-post-receive gitlab

8
推荐指数
1
解决办法
5053
查看次数

GIT 错误:致命:/usr/libexec/git-core/git-submodule 不能在没有工作树的情况下使用

我有一个带有子模块的 git repo。

我会在接收后挂钩文件中使用:

git --git-dir="$GIT_DIR" --work-tree="$GIT_WORKDIR1" submodule update --init --recursive 
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

remote: fatal: /usr/libexec/git-core/git-submodule cannot be used without a working tree.  
Run Code Online (Sandbox Code Playgroud)

我没有得到这个问题的解决方案。

我该怎么做才能让它发挥作用?

git git-submodules git-post-receive

8
推荐指数
1
解决办法
7384
查看次数

在脚本中捕获git post-receive错误

在bash脚本中,我做了一个

git push
Run Code Online (Sandbox Code Playgroud)

我检查它的退出状态.

在远程服务器上有一个post-receive hook,可以做一些事情.如果发生错误,则post-receive挂钩将以非零值退出.

但是当post-receive hook错误输出时,git push会正常退出.除非我专门检查输出的特定错误字符串(我不是),我的脚本认为一切正常.

我有一个简单的方法来确定接收后挂钩是否失败?

git bash git-post-receive git-bash

7
推荐指数
1
解决办法
1556
查看次数

Git post-receive hook将每个分支签出到不同的文件夹?

我们的Git工作流的基本设置是本地网络服务器上的裸存储库,有两个开发人员推送/拉动它.

我们希望自动复制(签出)被推送到本地网络服务器上不同位置的每个分支.举例说明:

将'develop'分支复制到'develop'子文件夹.将"主"分支复制到"主"子文件夹.

我们遇到的问题是获得post-receive hook来做到这一点.这是我们目前拥有的:

#!/bin/bash

while read oldrev newrev ref
do
  branch=`echo $ref | cut -d/ -f3`

  if [ "master" == "$branch" ]; then
    GIT_WORK_TREE=/master
    git checkout -f $branch
    echo 'Changes pushed master.'
  fi

  if [ "develop" == "$branch" ]; then
    GIT_WORK_TREE=/develop
    git checkout -f $branch
    echo 'Changes pushed to develop.'
  fi
done
Run Code Online (Sandbox Code Playgroud)

收到的错误是:

'remote:fatal:这个操作必须在远程工作树中运行:推动变革发展.

正如您对该错误所期望的那样 - 实际上没有任何内容被检出.

我也尝试过这种方式接收,但同样的问题:

#!/bin/bash

while read oldrev newrev ref
do
  branch=`echo $ref | cut -d/ -f3`

  if [ "master" == "$branch" ]; then …
Run Code Online (Sandbox Code Playgroud)

git git-post-receive

7
推荐指数
2
解决办法
4293
查看次数

如何在 Git post-receive hook 中获取已更改文件的列表?

我需要在服务器端挂钩中获取已更改文件的列表。例子:

Local commit 1:

M test.txt
M test2.txt

Local commit 2:

M test.txt
A test3.txt
Run Code Online (Sandbox Code Playgroud)

两个提交都被推送到服务器(裸仓库)。我需要遍历文件列表并通过 curl 在其他地方发布每个文件:

M test.txt
M test2.txt
A test3.txt
Run Code Online (Sandbox Code Playgroud)

我正在努力寻找实现这一目标的文档。我知道这些修订是针对标准输入的。我如何实际遍历推送的文件,并引用它们进行 curl 上传(这似乎很困难,因为它是一个裸仓库)?

#!/bin/bash

while read oldrev newrev refname; do
  echo $oldrev
  echo $newrev
  echo $refname
done < "${1:-/dev/stdin}"
Run Code Online (Sandbox Code Playgroud)

git git-post-receive

6
推荐指数
0
解决办法
2035
查看次数