我有一个带有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: '.'
如果我从钩子中删除该命令,我不会收到任何错误消息。
我不明白为什么直接在服务器上执行该命令时工作正常,而在推送后执行该命令则不然。
有什么建议吗?
答案 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>
将不会是你在执行钩子时想到的那个......