GIT 从钩子脚本克隆导致目录为空

GIT clone from hook script results in empty directory

我真的不知道这个该去哪里,我已经尝试了所有我能想到的方法。

我在 Ubuntu 14.04 上有一个 GitLab 服务器 运行ning。我创建了一个 post-receive hook 脚本 (bash),它将 repo 克隆到 /tmp 目录中的一个新文件夹,然后将文件复制到已安装的远程目录中。如果我 运行 脚本同时登录到 git 用户,脚本 运行 没问题,但是当它 运行 作为钩子脚本时它就不行了。脚本启动 运行 正常,但 git 克隆命令的结果是一个完全空的文件夹。甚至没有任何回购文件。另外,我没有从克隆命令中得到任何错误。克隆命令只有 return 一行:

(我的命令) git 克隆文件:///var/opt/gitlab/git-data/..../999.git 999

(return) 克隆到“999”

同样,如果我 运行 从同一用户的命令行执行相同的克隆命令,我不会遇到这个问题,所以我认为这不是权限问题。

关于从这里我可以去哪里的任何指示?

谢谢!

我无法重现这个问题,但这可能是因为你的 Git 版本比我的旧(我的是 2.8.1 和 2.6 为单独的工作目录添加了新选项,改变了很多代码问题;我不知道你有什么版本,但我打赌它早于 2.6)。所以这可能不是正确的解决方案,但话又说回来,它可能。 :-)

当挂钩脚本 运行 时,它们有一个环境变量 GIT_DIR,设置为包含存储库的路径。对于 post-receives,这始终只是 .(存储库目录中的 post-接收挂钩 运行s)。这似乎可能导致您的克隆失败。

如果是这样,只需在您的脚本中 unset GIT_DIR,然后再执行 git clone