你如何在一些Git存储库中获得Git存储库的名称?

问题描述 投票:97回答:14

当您在某个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
git repository
14个回答
114
投票

好吧,如果,对于存储库名称,您指的是Git根目录名称(包含.git目录的名称),您可以运行此命令:

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

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


1
投票

如果你想要整个GitHub存储库名称('全名') - 用户/存储库,并且你想用Ruby做它...

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

0
投票

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

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


0
投票

这是我的:

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
}

0
投票

另外我发现.git目录中有一些repo信息。所以你可以在终端上观看FETCH_HEAD文件,看看repo的名字:

例:

cd your_project_folder/.git
more FETCH_HEAD

输出:

672e38391557a192ab23a632d160ef37449c56ac        https://bitbucket.org/fonjeekay/some_repo

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


0
投票

回购全名:

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

-1
投票

你可以使用:git remote -v

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

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


101
投票

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

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

git remote show origin

显示有关您从中克隆存储库的原始远程的大量信息,它将包含原始克隆URL。

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


52
投票

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

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

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

这应该与Git 1.8.1.5一样。在此之前,现在已经弃用的git-repo-config命令会起作用(早在Git 1.7.5)。


18
投票

当您的目录名称与远程存储库名称不对应时,其他答案仍然无效(并且可能)。您可以使用以下内容获取存储库的真实名称:

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

基本上,您调用git remote show origin,从“获取URL:”字段获取存储库URL,并使用正则表达式获取名称部分:https://github.com/dragn/neat-vimrc.git


18
投票

git v2.7.0+,一个子命令get-url被引入git-remote命令。

POSIX shell:

basename $(git remote get-url origin)

电源外壳:

Split-Path -Leaf (git remote get-url origin)

5
投票

我认为这是明确识别存储库克隆的更好方法。

git config --get remote.origin.url并检查确保原点与ssh://your/repo匹配。


3
投票

这个问题有点晚了,但如果你:

cat /path/to/repo/.git/config

您将看到包含reponame的存储库的url:

[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

1
投票

这是一个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目录的完整路径。它存储在$gitdir的路径。

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

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

cat ${gitdir}/description

如果正确命名了repo,则打印内容。

else

除此以外...

echo "Unnamed repository!"

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


类似的东西在this script中实现。


1
投票

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

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

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

如果你想使用另一个子命令名而不是root,只需在上面的命令中用你想要的任何东西替换alias.root的第二部分。

有关Git中别名的详细信息,另请参阅git config man page

© www.soinside.com 2019 - 2024. All rights reserved.