如何获得Git存储库&x27;Git存储库中的名字?

如何获得Git存储库&x27;Git存储库中的名字?,git,repository,Git,Repository,当您在某个Git目录中工作时,如何在某个Git存储库中获取Git存储库名称?有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 worki

当您在某个Git目录中工作时,如何在某个Git存储库中获取Git存储库名称?有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
#我确实查看了酒吧储存库并在某个地方工作
#此时在bar目录下如下图所示。
$git克隆git://github.com/foo/bar.git
$cd bar/baz/qux/qux/corge/grault#我在这里工作!

$git xxx#通常,您不能这样做。Git不关心Git存储库的命名方式。例如,您可以重命名包含您的存储库的目录(一个包含
.git
子目录),git甚至不会注意到它—一切都将继续工作

但是,如果克隆了它,则可以使用以下命令:

git remote show origin
显示有关从中克隆存储库的原始远程服务器的大量信息,其中将包含原始克隆URL


但是,如果您使用
git remote rm origin
删除了指向原始远程的链接,或者如果您使用
git init
创建了存储库,则无法获取此类信息-它不存在于任何地方。

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

正如所指出的,您可以使用
git rev parse--show toplevel
来显示当前git文件夹的根目录

如果您想定期使用它,将其定义为别名可能更方便。为此,使用了
git config alias.root'!echo“$(git rev parse--show top level)”
。之后,您可以使用
git root
查看当前所在存储库的根文件夹

如果要使用除
root
以外的其他子命令名,只需将上述命令中的
alias.root
的第二部分替换为所需的名称即可


有关Git中别名的详细信息,请参见。

如果存储库名称是指Git根目录名称(包含.Git目录的名称),则可以运行以下操作:

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

git rev parse--show toplevel
部分为您提供该目录的路径,而
basename
将剥离路径的第一部分。

当您的目录名称与远程存储库名称不对应时,其他答案仍然不起作用(它可以)。 您可以通过以下方式获得存储库的真实名称:

git-remoteshow-origin-n | grep“获取URL:| sed-E”s#^./(.*)$#\1#“| sed”s#.git$##”

基本上,您可以调用
git remote show origin
,从“Fetch URL:”字段中获取存储库URL,并对其进行正则化以获取名称为的部分:

如果您想要整个GitHub存储库名称(“全名”)-user/repository,并且希望在Ruby中使用它

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

无需联系存储库获取名称,文件夹名称也不一定反映远程名称

我发现这是获取当前存储库名称最准确、最有效的方法:

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

这应该在Git 1.8.1.5中起作用。在此之前,现在不推荐使用的
git repo config
命令(早在git 1.7.5中)就可以使用了。

使用
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远程-v

文件:

管理您跟踪其分支的存储库集(“远程”)。 -五 --verbose应该更详细一点,并在名称后显示远程url。注意:这必须放在远程命令和子命令之间


下面是一个bash函数,它将打印存储库名称(如果已正确设置):

说明:

local gitdir=$(git rev-parse --git-dir)
这将执行
git rev parse--git dir
,它将打印当前存储库的
.git
目录的完整路径。它将路径存储在
$gitdir

if [ $(cat ${gitdir}/description) != "..." ]; then
这将执行
cat${gitdir}/description
,它将打印当前存储库的
.git/description
的内容。如果您正确命名了存储库,它将打印一个名称。否则,将打印
未命名存储库;编辑此文件“说明”以命名存储库。

cat ${gitdir}/description
如果回购协议的名称正确,则打印内容

else
否则

echo "Unnamed repository!"
告诉用户回购协议未命名



类似的功能也在中实现。

我认为这是一种更好的方法,可以明确地识别存储库的克隆

git config——获取remote.origin.url
并检查以确保源匹配
ssh://your/repo

在中,在git remote
命令中引入了子命令
get url

POSIX外壳:

basename$(git远程获取url来源)
PowerShell:

splitpath-Leaf(git-remote-get-url-origin)

另外,我刚刚发现
.git
目录中有一些回购信息。因此,您只需在终端中观看
FETCH_HEAD
文件即可查看回购协议的名称:

示例:

cd your_project_folder/.git
more FETCH_HEAD
672e38391557a192ab23a632d160ef37449c56ac        https://bitbucket.org/fonjeekay/some_repo
输出:

cd your_project_folder/.git
more FETCH_HEAD
672e38391557a192ab23a632d160ef37449c56ac        https://bitbucket.org/fonjeekay/some_repo

https://bitbucket.org/somebituser/some_repo.git
是您存储库的名称

回答此问题有点晚,但如果您:

cat /path/to/repo/.git/config
您将看到存储库的url,其中将包括reponame:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/your_git_user_name/your_git_repo_name.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
回购协议全称:

git config --get remote.origin.url | grep -Po "(?<=git@github\.com:)(.*?)(?=.git)"

git config--get remote.origin.url | grep-Po“(?如果您试图在github上获取用户名或组织名称以及项目或repo名称,我可以编写这个命令,它至少在本地对我有效

▶ git config--获取remote.origin.url
# => https://github.com/Vydia/gourami.git
▶ git config--get remote.origin.url | sed's/*\/\([^]*\/[^.]*\)./\1/'#捕获.git中点之前的最后两个路径段
#=>Vydia/go