首页 > 解决方案 > .git post-receive 挂钩,在终端中执行时有效;但不是在推动之后

问题描述

我要从 Jekyll 搬到 Hugo(太棒了!)。

我的部署挂钩一直运行良好,但需要进行小更新。以前的和当前的流程是:

我编写了 shell 脚本,当我在 shell 中执行它时,在服务器上,它按预期工作!耶!

但是,当我进行微不足道的编辑(以触发钩子)并推送时,钩子运行,但我从 git 得到错误。我从set -x下面提供了最奇怪的输出:

remote: + rm -rf /home/sgharms/tmp/stevengharms.com
remote: + mkdir /home/sgharms/tmp/stevengharms.com
remote: + cd /home/sgharms/tmp/stevengharms.com
remote: + echo Changing into /home/sgharms/tmp/stevengharms.com
remote: Changing into /home/sgharms/tmp/stevengharms.com
remote: + cd /home/sgharms/tmp/stevengharms.com
remote: + git init
remote: Initialized empty Git repository in /home/sgharms/tmp/stevengharms.com/
remote: + git remote add origin file:////home/sgharms/stevengharms.com.git
remote: + git fetch origin
remote: From file:////home/sgharms/stevengharms.com
remote:  * [new branch]      master     -> origin/master
remote: + echo XXXXX
remote: XXXXX
remote: + pwd
remote: /home/sgharms/tmp/stevengharms.com
remote: + git checkout master
remote: fatal: This operation must be run in a work tree

sh -x post-receive但是,如果我使用...运行接收后脚本

+ rm -rf /home/sgharms/tmp/stevengharms.com
+ mkdir /home/sgharms/tmp/stevengharms.com
+ cd /home/sgharms/tmp/stevengharms.com
+ echo Changing into /home/sgharms/tmp/stevengharms.com
Changing into /home/sgharms/tmp/stevengharms.com
+ cd /home/sgharms/tmp/stevengharms.com
+ git init
Initialized empty Git repository in /home/sgharms/tmp/stevengharms.com/.git/
+ git remote add origin file:////home/sgharms/stevengharms.com.git
+ git fetch origin
remote: Counting objects: 2304, done.
remote: Compressing objects: 100% (2222/2222), done.
remote: Total 2304 (delta 72), reused 2245 (delta 42)
Receiving objects: 100% (2304/2304), 118.65 MiB | 42.91 MiB/s, done.
Resolving deltas: 100% (72/72), done.
From file:////home/sgharms/stevengharms.com
 * [new branch]      master     -> origin/master
+ echo XXXXX
XXXXX
+ pwd
/home/sgharms/tmp/stevengharms.com
+ git checkout master
Branch master set up to track remote branch master from origin by rebasing.
+ ls .git
branches  config  description  FETCH_HEAD  HEAD  hooks  index  info  logs  objects  refs
...
...
+ git submodule update --init
Submodule 'themes/ananke' (https://github.com/budparr/gohugo-theme-ananke.git) registered for path 'themes/ananke'

好的。我有一些有用的数据。但我不确定从这里去哪里。

  1. 问题是 git 子模块吗?
  2. whoami报告在同一用户处执行

我对接下来要调试什么感到很困惑。我添加了各种各样的ls -al .git东西来确保 git 的东西总是存在的,而且确实存在。虽然我受到阻碍,但我也很好奇我在这里缺少什么。有接盘侠吗?

标签: githook

解决方案


对于未来的寻求者,Torek 的回答让我走上了正确的道路。最终,我更新了他指出的环境变量,如下所示:

GIT_DIR=$GIT_REPO # the bare-repository with the content in it `~/foo.git`
GIT_WORK_TREE=$TMP_GIT_CLONE # the "working" checkout of the bare repo

推荐阅读