我的设置与我在新服务器上创建的设置类似,所以我知道“原理有效”。我有一个 Git post-receive,看起来像这样:
#!/bin/sh
git --work-tree="~/public_html" --git-dir="~/repo/website" checkout master -f
我已经检查了 10 次这些是现有的且正确的文件夹:-)
为了设置 Git 存储库,我运行了以下命令:
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'
然后我尝试完全删除存储库并从头开始制作它。但在第 4 次尝试时,我开始认为这不是前进的方向 ;-)
我在相关的 Stackoverflow 线程上读到可能 HEAD 文件已损坏。然而,它看起来不错 - 并且与其他从头开始的尝试一起重新制作了四次。
出于部署原因,我需要设置工作树等。它在其他服务器上使用相同的设置工作正常。
我希望有人知道如何解决这个问题。谢谢!
最佳答案
只有当 ~/
位于单词的开头时,shell 才会展开它。你把它放在一个词的中间。
你应该写
#!/bin/sh
git --work-tree="$HOME/public_html" --git-dir="$HOME/repo/website" checkout -f master
最重要的是,由于 ~
出现在双引号内,该字符被视为“被引用”并且将保持不变,无论 shell 是否可以猜测 --git- dir=
有一些特殊的含义。
关于Git 钩子(Hook) : "fatal: not a git repository:",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67212201/