git - .git post-receive 挂钩,在终端中执行时有效;但不是在推动之后
问题描述
我要从 Jekyll 搬到 Hugo(太棒了!)。
我的部署挂钩一直运行良好,但需要进行小更新。以前的和当前的流程是:
- 在同一台机器上创建源(裸)repo 的新临时克隆
- 运行生成器
- 将文件移动到 Web 服务器目录
- 中提琴,新内容
我编写了 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'
好的。我有一些有用的数据。但我不确定从这里去哪里。
- 问题是 git 子模块吗?
whoami
报告在同一用户处执行
我对接下来要调试什么感到很困惑。我添加了各种各样的ls -al .git
东西来确保 git 的东西总是存在的,而且确实存在。虽然我受到阻碍,但我也很好奇我在这里缺少什么。有接盘侠吗?
解决方案
对于未来的寻求者,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
推荐阅读
- c++ - 如何在不知道 Arduino 大小的情况下创建数组并在其中存储值
- python - 在heroku服务器上的python中生成的错误消息ID
- php - 如何将上传的文件移动到 Laravel 中 public_html 内的公用文件夹?
- jquery - TinyMCE KeyDown 事件不适用于 jQuery
- r - 在 R 中组合链接数据行的最佳方法是什么?
- python - 无法打开插入另一张图片的图片
- c# - 如何在c#中更改列表中二维数组中特定项的值
- junit4 - Power Mockito 显示 org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner 错误无法解决
- git - Git svn - 每个文件夹一个 git repo(拉一次)
- mysql - 带有 SUM 的 MySQL 内连接显示不正确的值