Git post-收到无法处理非裸回购

Git post-receive not working on non-bare repo

我正在尝试让一个简单的 Git post-receive 挂钩起作用,但它似乎不是 运行ning。

我只有:

#!/bin/sh
git checkout -f master

请注意,这是一个非裸存储库(我设置了 denyCurrentBranch = ignore)以便我可以推送到它。

但是,当我按下它时,它似乎并没有运行 git checkout -f 命令。 运行 命令行中的相同命令会按预期执行。

请注意,这是一个简单的测试用例,仅使用我 C 盘上的本地存储库。

我已经设法让 post-receive 挂钩正常工作,方法是拥有一个裸仓库并将 git push 放入其中。我的意图是在 post-receive 中有一个裸 "shared" 回购,然后自动推送到非裸 "website" 回购(然后需要自动执行 git checkout -f).

知道为什么这不适用于非裸仓库吗?或者关于如何调试它的任何提示?

原来是因为non-bare repo中的当前工作目录是.git目录。

所以虽然我可以在裸仓库中执行此操作(因为 git 元数据文件夹与仓库根文件夹相同)...

#!/bin/sh
git do something

在非裸仓库中,我必须这样做...

#!/bin/sh
GIT_WORK_TREE=.. git do something