post-receive hook中的Git checkout:“操作必须在工作树中运行”

时间:2014-05-30 13:22:32

标签: git

为了使用git远程更新我的网站,我在共享主机帐户的根目录下创建了一个简单的git repo以及以下的post-receive钩子:

#!/bin/sh
export GIT_WORK_TREE=/public_html
git checkout -f

这最初按预期工作:将我的更改推送到远程仓库时,触发后接收挂钩并将文件签出到/ public_html文件夹。

但是,我现在得到一个“致命的:这个操作必须在工作树中运行”结帐时出错。我不知道为什么现在出现这个错误,因为我没有对我的设置做任何改动。

我被困住了。对我来说,这应该只是工作(它实际上是这样),除非我完全误解了git是如何工作的。我一直在寻找类似于我的问题,但到目前为止还没有找到任何有用的东西。

如果我有任何想法,我将不胜感激。

3 个答案:

答案 0 :(得分:0)

挂钩在.git目录中运行。

我在cd ..之前使用git checkout作为一个简单的解决方法。

如果.git回购与结帐地点完全脱节,您还可以想象

cd /path/to/checkout
GIT_DIR=/path/to/repo/.git git checkout -f

答案 1 :(得分:0)

我有类似的问题。我曾尝试更改hooks / post-receive中的目录并且正在上传,但之后我会收到错误' remote:fatal:此操作必须在工作树中运行'。我查看了git的工作实例,并注意到唯一的区别是在checkout命令之前的GIT_WORK_TREE之后的换行符。当我删除那个休息以便git checkout -f在同一行时,它有效!

改变了这一点:

#!/bin/sh
GIT_WORK_TREE=/var/www/vhosts/dylanglockler.com/dev.brightsideresumes.com 
git checkout -f

对此:

#!/bin/sh
GIT_WORK_TREE=/var/www/vhosts/dylanglockler.com/dev.brightsideresumes.com git checkout -f

答案 2 :(得分:0)

我的解决方案:

git clone --mirror git@github.com:iamshaunjp/tailwind-tutorial.git tailwind-tutorial/.git/;
cd tailwind-tutorial;
git init;
git branch -a;
git checkout lesson-19;