Git hook:“;致命:不是git存储库;

Git hook:“;致命:不是git存储库;,git,githooks,Git,Githooks,我的设置与我在新服务器上创建的设置类似,因此我知道“原理可行”。我有一个Git post receive,如下所示: #!/bin/sh git --work-tree="~/public_html" --git-dir="~/repo/website" checkout master -f 我已经检查了十次这些文件夹是否存在且正确:-) 为了设置Git repo,我运行了以下命令: cd ~/repo/website git init --bare #

我的设置与我在新服务器上创建的设置类似,因此我知道“原理可行”。我有一个Git post receive,如下所示:

#!/bin/sh
git --work-tree="~/public_html" --git-dir="~/repo/website" checkout master -f
我已经检查了十次这些文件夹是否存在且正确:-)

为了设置Git repo,我运行了以下命令:

cd ~/repo/website
git init --bare
# Added content to post-receive file
chmod +x hooks/post-receive
# Verified that these permissions are set on the file
我在回购协议中添加(推送)了一些内容以供测试。现在,当我尝试使用此命令执行测试命令时:

cd ~/repo/website && bash hooks/post-receive
我得到这个错误:

fatal: not a git repository: '~/repo/website'
然后我试图完全删除回购协议,从头开始。但在第四次尝试时,我开始认为这不是前进的方向;-)

我在相关的Stackoverflow线程上读到,可能头文件已损坏。然而,它看起来很好,并且已经与其他从头开始的尝试一起重新制作了四次

出于部署原因,我需要设置工作树,等等。在其他服务器上使用相同的设置可以很好地工作


我希望有人知道如何解决这个问题。谢谢

shell仅当位于单词开头时才展开。你有一个词的中间。

你应该写

#!/bin/sh
git --work-tree="$HOME/public_html" --git-dir="$HOME/repo/website" checkout -f master
除此之外,由于
~
出现在双引号内,因此该字符将被视为“quoted”,并且无论shell是否能够猜出
--git dir=
具有某种特殊含义,都不会被修改