我有一个git post接收挂钩,它会触发构建系统上的构建。 我需要在钩子脚本中创建一个形式为“$ repo-name + $ branch”的字符串。git post-receive hook如何获取正在运行的repo的名称?
我可以解析分支,但我怎样才能从git获取存储库名称?
谢谢!
我有一个git post接收挂钩,它会触发构建系统上的构建。 我需要在钩子脚本中创建一个形式为“$ repo-name + $ branch”的字符串。git post-receive hook如何获取正在运行的repo的名称?
我可以解析分支,但我怎样才能从git获取存储库名称?
谢谢!
我想,“存储库名称”在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
延长裸存储库的情况下,你可以添加一个线到第一壳体剥离其关闭:如果一个人使用Gitolite
REPOSITORY_BASENAME=$(basename "$PWD")
REPOSITORY_BASENAME=${REPOSITORY_BASENAME%.git}
您可以检查$ GIT_DIR或$ GIT_WORK_TREE并从那里获取回购商品名称。
'GIT_DIR'设置为'.','GIT_WORK_TREE'没有在环境中设置钩子。 – 2011-04-07 16:12:01
你可以做git rev-parse --show-toplevel
,它会给你顶层目录的路径,并将名称拉出来(reponame.git对于远程访问的回购是常规的)。
$PWD
也可能具有相同的信息,但我不确定。
'git rev-parse --show-toplevel'在裸仓库中不起作用。 ('$ PWD'将是具有工作树的存储库的工作树的顶层,或者是裸仓库的存储库目录本身,因此您需要做更多的工作才能获得有用的名称......) – 2011-04-07 16:07:57
,所述GL_REPO
变量在post-receive
环境默认可用。
太好了。这样可行。我怎样才能从裸回购中删除“.git”? – Jacko 2011-04-07 16:42:28
@Jacko:我已经更新了答案,提出了一种方法来做到这一点 – 2011-04-07 16:49:49
Aweseome !!!!谢谢。 – Jacko 2011-04-07 17:12:42