post接收钩子中的Git签出;操作必须在工作树中运行;

post接收钩子中的Git签出;操作必须在工作树中运行;,git,Git,为了用git远程更新我的网站,我在我的共享托管帐户的根目录下创建了一个裸git repo以及以下post接收挂钩: #!/bin/sh export GIT_WORK_TREE=/public_html git checkout -f 这一操作最初是按预期进行的:当将我的更改推送到远程repo时,启动post-receive钩子,并将文件签出到/public\u html文件夹 但是,我现在在签出时遇到了一个“致命:此操作必须在工作树中运行”错误。我不知道为什么现在会出现这个错误,因为我没有对

为了用git远程更新我的网站,我在我的共享托管帐户的根目录下创建了一个裸git repo以及以下post接收挂钩:

#!/bin/sh
export GIT_WORK_TREE=/public_html
git checkout -f
这一操作最初是按预期进行的:当将我的更改推送到远程repo时,启动post-receive钩子,并将文件签出到/public\u html文件夹

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

我被卡住了。对我来说,这应该是可行的(事实上确实如此),除非我完全误解了git的工作原理。我一直在寻找类似的问题,但迄今为止还没有发现任何有用的


如果您能告诉我应该去哪里,我将不胜感激。

钩子运行在
.git
目录中

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

如果
.git
repo与签出位置完全分离,您也可以想象

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

我也有类似的问题。我试图更改hooks/post-receive中的目录,它正在上载,但随后我会得到错误“remote:fatal:此操作必须在工作树中运行”。我回顾了正在工作的git实例,注意到唯一的区别是在checkout命令之前的git_WORK_树之后有一个换行符。当我删除了这个中断,使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
我的解决方案:

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;

您所指向的“可能重复”的可能重复项来自试图使用裸回购运行
git add
。答案解释了为什么这不起作用。我理解这一点,但我不认为它回答了我的问题。你是对的-我选错了副本,但实际上副本是正确的:
我创建了一个裸git回购
-你在一个裸存储库上发布了
git签出
。对于您正在尝试执行的操作(推送时更新工作副本),public_html通常是其自身的签出(除了裸回购),如果您愿意,在推送裸回购时您可以更新public_html。感谢您花时间响应,但路径似乎不是问题。我仍然得到同样的错误。。。