git post-receive hook怎么能得到它正在运行的repo的名字?

时间:2011-04-07 14:57:10

标签: git

我有一个git post receive钩子,它将在我的构建系统上触发构建。 我需要在钩子脚本中创建一个“$ repo-name + $ branch”形式的字符串。

我可以解析分支,但是如何从git获取存储库名称?

谢谢!

4 个答案:

答案 0 :(得分:38)

我认为“存储库名称”在git中并不是一个定义明确的想法。也许最有用的是在裸存储库的情况下返回whatever.git或者在具有工作树的存储库的情况下返回whatever。我已经测试过,这个Bourne shell可以在post-receive钩子中正确处理这两种情况:

if [ $(git rev-parse --is-bare-repository) = true ]
then
    REPOSITORY_BASENAME=$(basename "$PWD") 
else
    REPOSITORY_BASENAME=$(basename $(readlink -nf "$PWD"/..))
fi
echo REPOSITORY_BASENAME is $REPOSITORY_BASENAME

更新:如果要删除裸存储库案例中的.git扩展名,可以在第一个案例中添加一行以将其删除:

    REPOSITORY_BASENAME=$(basename "$PWD")
    REPOSITORY_BASENAME=${REPOSITORY_BASENAME%.git}

答案 1 :(得分:1)

您可以检查$ GIT_DIR或$ GIT_WORK_TREE并从那里获取回购名称。

答案 2 :(得分:0)

您可以执行git rev-parse --show-toplevel,它会为您提供顶级目录的路径,并从中提取名称(reponame.git是可远程访问的repos的常规名称)。

$PWD也可能有相同的信息,但我不确定。

答案 3 :(得分:0)

如果正在使用Gitolite,则默认情况下GL_REPO环境中的post-receive变量可用。