我有一个git post receive钩子,它将在我的构建系统上触发构建。 我需要在钩子脚本中创建一个“$ repo-name + $ branch”形式的字符串。
我可以解析分支,但是如何从git获取存储库名称?
谢谢!
答案 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
变量可用。