你如何得到一些git仓库中的git仓库名称?

可能这是git的一个基本问题。 当你在某个git目录下工作时,如何在某个git仓库中获得git repos的名字? 有没有任何git的命令?

# I did check out bar repository and working in somewhere # under bar directory at this moment such as below. $ git clone git://github.com/foo/bar.git $ cd bar/baz/qux/quux/corge/grault # and I am working in here! $ git xxx # <- ??? bar 

那么,如果存储库名称是指git根目录名称(包含.git目录的名称),则可以运行

 basename `git rev-parse --show-toplevel` 

git rev-parse --show-toplevel部分为您提供了该目录的path,并且基本名称将剥离path的第一部分。

一般来说,你不能这样做。 Git不关心你的git仓库是如何命名的。 例如,您可以重命名包含您的存储库(一个与.git子目录)目录,git甚至不会注意到它 – 一切将继续工作。

但是,如果你克隆它,你可以使用命令:

 git remote show origin 

显示大量克隆存储库的原始远程信息,并将包含原始克隆URL。

但是,如果你使用git remote rm origin删除了原始远程的链接,或者如果你使用git init创build了这个信息库,那么这些信息根本就不可能获得 – 它不存在于任何地方。

当你的目录名称不对应于远程存储库的名称时,其他的答案仍然不起作用。 你可以像这样得到存储库的真实名称:

git remote show origin -n | grep "Fetch URL:" | sed -E "s#^.*/(.*)$#\1#" | sed "s#.git$##"

基本上,你可以调用git remote show origin ,从“Fetch URL:”字段获取版本库URL,并将其正则expression式获得名称为https://github.com/dragn/ neat-vimrc .git的部分

没有必要联系回购获取名称和文件夹名称不一定会反映远程名称。 我发现这是获得当前回购股票名称的最准确和最有效的方式。

 basename -s .git `git config --get remote.origin.url` 

这应该工作于git 1.8.1.5。 在此之前,现在已经废弃的git-repo-config命令已经工作了(早在git 1.7.5)。

不幸的是,似乎Git没有内置这样的命令,但是你可以使用Git别名和一些shell魔法轻松地添加它。

正如这个答案所指出的,你可以使用git rev-parse --show-toplevel显示你当前的git文件夹的根目录。

如果你想定期使用它,那么将其定义为别名可能更为方便。 为此,使用git config alias.root '!echo "$(git rev-parse --show-toplevel)"' 。 之后,您可以使用git root来查看您当前所在的回购站的根文件夹。

如果要使用另一个子命令名称,只需将上述命令中的alias.root的第二部分replace为任何所需的名称即可。

有关Git中别名的详细信息,请参阅git config手册页 。

如果你想要整个github回购的名字('全名') – 用户/回购,并且你想用ruby来做…

 git remote show origin -n | ruby -ne 'puts /^\s*Fetch.*:(.*).git/.match($_)[1] rescue nil' 

这种使用git-remote方法对我来说非常适合HTTPS遥控器:

 $ git remote -v | grep "(fetch)" | sed 's/.*\/\([^ ]*\)\/.*/\1/' | | | | | | | +---------------+ | | | Extract capture | | +--------------------+-----+ |Repository name capture| +-----------------------+ 

这是我的:

 git remote --verbose | grep origin | grep fetch | cut -f2 | cut -d' ' -f1 

没有比别人好,但我做了一个bash函数,所以我可以放在远程名称,如果它不是起源。

 grurl () { xx_remote=$1 [ -z "$xx_remote" ] && xx_remote=origin git remote --verbose | grep "$1" | grep fetch | cut -f2 | cut -d' ' -f1 unset xx_remote } 

你可以使用:git remote -v

文档: https : //git-scm.com/docs/git-remote

pipe理您追踪分支的存储库(“远程”)。 -v –verbose稍微详细一点,在名字后面显示远程URL。 注:这必须放在远程和子命令之间。

这是一个打印存储库名称的bash函数(如果已经正确设置):

 __get_reponame () { local gitdir=$(git rev-parse --git-dir) if [ $(cat ${gitdir}/description) != "Unnamed repository; edit this file 'description' to name the repository." ]; then cat ${gitdir}/description else echo "Unnamed repository!" fi } 

说明:

 local gitdir=$(git rev-parse --git-dir) 

这将执行git rev-parse --git-dir ,它将打印currrent存储库的.git目录的完整path。 它将path存储在$gitdir

 if [ $(cat ${gitdir}/description) != "..." ]; then 

这将执行cat ${gitdir}/description ,它将打印当前存储库的.git/description内容。 如果你已经正确地命名了你的仓库,它会打印一个名字。 否则,它会打印Unnamed repository; edit this file 'description' to name the repository. Unnamed repository; edit this file 'description' to name the repository.

 cat ${gitdir}/description 

如果回购是正确的命名,然后打印内容。

 else 

除此以外…

 echo "Unnamed repository!" 

告诉用户该回购是未命名的。


在这个脚本中实现了类似的东西。