【发布时间】:2021-09-10 16:51:51
【问题描述】:
我正在试验 git 钩子,并试图让我用来托管我的代码的 git 服务器在每次推送提交后执行构建。我已经从我托管的服务器存储库中克隆了一个本地(在服务器上)git 存储库。 server-repository 和服务器的 repo 本地实例都在同一台机器上,即服务器。我使用这个本地实例化来执行构建。
目前我正在使用 post-update git 挂钩在每次新推送到存储库后运行以下脚本:
#!/bin/sh
#get the branch name that was pushed
branch=$(git rev-parse --symbolic --abbrev-ref $1)
echo performing a build on branch: $branch
cd /path/to/server/local/repodir
git checkout -f $branch
git pull origin $branch
make
echo "Build Done"
我能够运行 git 钩子,它实际上构建了一切正常。但是,git checkout 和 pull 命令失败,并给出以下异常:
fatal: not a git repository: '.'
我不确定为什么会这样,因为我之前 cd 进入了 git 目录的命令。在服务器上的终端中运行相同的脚本运行良好,git 会像往常一样执行操作。我通过在钩子中输入 pwd 和 ls -la 进行了检查,shell 位于正确的文件夹中,并且其中有一个 .git 存储库项,这意味着 git 应该有在此文件夹中执行没有问题。
git hooks 是否有什么特别的东西会阻止 git 签出和拉取刚从另一个设备推送的这些 repos?我不这么认为,但我不明白为什么 git 似乎找不到 git 存储库,并且似乎只在看 '。'
在 git hook 中进行 git checkout/pull 的正确方法是什么?
【问题讨论】: