你如何得到一些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!"
告诉用户该回购是未命名的。
在这个脚本中实现了类似的东西。