Git 钩子(Hook) : "fatal: not a git repository:"

标签 git githooks

我的设置与我在新服务器上创建的设置类似,所以我知道“原理有效”。我有一个 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/

相关文章:

git - 如何使用Composer进行浅克隆?

git - 如何在接受任何一个之前将第二个 pull 请求堆叠在现有 pull 请求之上?

ruby - Git 提交消息的正则表达式

r - git commit 抛出错误 '[<-'

git - 如何恢复 git 历史记录重写?

git - pull 和推的不同默认远程,同时允许手动指定一个

git - 让每个人的 git 忽略已经跟踪的文件(但不要从存储库中删除)

git - Bitbucket 上的 POST Hook

git - 如何在 Jenkins 中一次只远程触发一个构建?

bash - 从 git hook 调用脚本