Git hook/post没有收到这样的文件或目录

Git hook/post没有收到这样的文件或目录,git,git-bash,githooks,git-post-receive,git-bare,Git,Git Bash,Githooks,Git Post Receive,Git Bare,所以我有一个空的存储库,我们用它来控制对网页的更改。在裸回购协议上有一个post-receive钩子,当我们将更改推送到它时,它就会运行。钩子所做的只是使用以下代码实现对工作目录的更改: WRK_DIR="/url/to/work/tree/" GIT_DIR="/url/to/bare/repo.git/" #Update WRK_DIR with changes pushed into GIT_DIR... git --work-tree=$WRK_DIR --git-dir=$GIT_D

所以我有一个空的存储库,我们用它来控制对网页的更改。在裸回购协议上有一个post-receive钩子,当我们将更改推送到它时,它就会运行。钩子所做的只是使用以下代码实现对工作目录的更改:

WRK_DIR="/url/to/work/tree/"
GIT_DIR="/url/to/bare/repo.git/"

#Update WRK_DIR with changes pushed into GIT_DIR...
git --work-tree=$WRK_DIR --git-dir=$GIT_DIR checkout -f
无论出于何种原因,我收到以下信息:

remote: fatal: Not a git repository: '/url/to/bare/repo.git/'
我已经验证了钩子是否在正确的用户下运行,并且该用户对该文件夹具有权限。但是不管出于什么原因,钩子都找不到目录,我绝对肯定url是正确的

运行

cd /url/to/bare/repo.git/
从钩子里也回来了

remote: hooks/post-receive: line 13: cd: /url/to/bare/repo.git/: No such file or directory
就像我说的,我确信url是正确的,并且没有输入错误。任何帮助都将不胜感激。

挂钩和裸回购都在服务器上,所以我在挂钩中放了一些cd,以测试它返回了什么。奇怪的是,它返回了我本地机器的内容。。。我不知道为什么,但如果我将变量更改为文件夹的网络位置,并转义反斜杠,它将正常执行


路径中是否有
~
(主目录)?如果是,请将其更改为真正的主路径。@ElpieKay感谢您的快速回复,但不是。该路径是来自C驱动器的完整路径。如果手动运行此命令,是否有效?你说的是“C驱动”,这就打开了各种各样的“带有空格和反斜杠的窗口路径”错误的可能性。此外,引用变量也是一种很好的做法,例如,
git--work tree=“$WRK_DIR”--git DIR=“$git_DIR”checkout-f
,以防变量中有空格和其他内容。@Mort感谢您的输入,但我已经设法解决了这个问题。挂钩和裸回购都在服务器上,所以我在挂钩中放了一些cd,以测试它返回了什么。奇怪的是,它返回了我本地机器的内容。。。我不知道为什么,但如果我将变量更改为文件夹的网络位置,并转义反斜杠,它会很好地执行。我不确定你为什么要首先尝试这样做。与其推动生产,为什么不作为部署步骤从源站拉过来呢?如果您创建了一个非裸存储库,那么就不需要钩子了。