Git post-receive hook无法正常工作

时间:2012-05-10 09:24:17

标签: git githooks git-post-receive

我有一个带有git存储库的服务器。每次我推送到该服务器时,我都希望为该存储库重新生成我的gitstats文档。

在该机器中,如果我执行以下命令,gitstats文档会正确刷新:

gitstats /home/<username>/<proyect-name>/htdocs/ /home/<username>/gitstats

这是我在该服务器的存储库中的post-receive挂钩:

#!/bin/sh
gitstats /home/<username>/<proyect-name>/htdocs/ /home/<username>/gitstats

因此,当我推送到该机器时,它会尝试执行该命令,但它无法正常工作,推送后的输出消息包含以下错误消息:

remote: fatal: Not a git repository: '.'

如果我从钩子中删除该命令,我不会收到任何错误消息。

我不明白为什么直接在服务器上执行该命令时工作正常,而在推送后执行该命令则不然。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

问题是在该钩子中执行gitstat时可能没有正确设置GIT_WORK_TREE和/或GIT_DIR

尝试在gitstat命令之前设置它们:

GIT_DIR=/home/<username>/<proyect-name>/.git
GIT_WORK_TREE=/home/<username>/<proyect-name>
gitstats ... 

为什么这些变量不能正确设置?
例如,请参阅“Calling 'git pull' from a git post-update hook

  

最终我们得到了我们的linux专家,他注意到git用户运行的环境在钩子里面时完全不同。

在这种情况下,你的<username>将不会是你在执行钩子时想到的那个......