2011-04-07 110 views

回答

37

我想,“存储库名称”在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} 
+1

太好了。这样可行。我怎样才能从裸回购中删除“.git”? – Jacko 2011-04-07 16:42:28

+0

@Jacko:我已经更新了答案,提出了一种方法来做到这一点 – 2011-04-07 16:49:49

+0

Aweseome !!!!谢谢。 – Jacko 2011-04-07 17:12:42

1

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

+2

'GIT_DIR'设置为'.','GIT_WORK_TREE'没有在环境中设置钩子。 – 2011-04-07 16:12:01

0

你可以做git rev-parse --show-toplevel,它会给你顶层目录的路径,并将名称拉出来(reponame.git对于远程访问的回购是常规的)。

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

+1

'git rev-parse --show-toplevel'在裸仓库中不起作用。 ('$ PWD'将是具有工作树的存储库的工作树的顶层,或者是裸仓库的存储库目录本身,因此您需要做更多的工作才能获得有用的名称......) – 2011-04-07 16:07:57

0

,所述GL_REPO变量在post-receive环境默认可用。

相关问题