1

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

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

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

这是我在该服务器存储库中的接收后挂钩:

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

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

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

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

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

有什么建议么?

4

1 回答 1

1

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

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

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

为什么这些变量不能正确设置?
参见例如“ Calling ' git pull' from a git post-updatehook

最终我们找到了我们的 linux 大师,他注意到 git 用户运行的环境在 hook 中是完全不同的。

在这种情况下,<username>当钩子被执行时,你不会是你想的那样......

于 2012-05-10T10:59:39.590 回答