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

时间:2013-03-30 06:47:05

标签: 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 working in here!
$ git xxx # <- ???
bar

16 个答案:

答案 0 :(得分:107)

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

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

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

答案 1 :(得分:100)

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

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

git remote show origin

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

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

答案 2 :(得分:50)

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

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

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

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

答案 3 :(得分:16)

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

POSIX shell:

basename $(git remote get-url origin)

PowerShell:

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

答案 4 :(得分:4)

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

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

答案 5 :(得分:3)

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

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

您将看到存储库的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

答案 6 :(得分: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

答案 7 :(得分:1)

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

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

答案 8 :(得分: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

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

else

...否则

echo "Unnamed repository!"

告诉用户该回购邮件未命名。

this script中实现了类似的功能。

答案 9 :(得分:1)

如果您想在github上获取用户名或组织名称以及项目或仓库名称,我至少可以在本地编写此命令。

▶ git config --get remote.origin.url
# => https://github.com/Vydia/gourami.git

▶ git config --get remote.origin.url | sed 's/.*\/\([^ ]*\/[^.]*\).*/\1/' # Capture last 2 path segments before the dot in .git
# => Vydia/gourami

这是期望的结果,因为Vydia是组织名称,gourami是软件包名称。结合起来,它们可以帮助形成完整的User/Repo路径

答案 10 :(得分:0)

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

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

示例

答案 11 :(得分: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
}

答案 12 :(得分:0)

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

示例:

cd your_project_folder/.git
more FETCH_HEAD

输出:

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

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

答案 13 :(得分:0)

回购全名:

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

答案 14 :(得分:0)

此版本在git-2.18.2上运行良好,可以从git目标存储库外部启动:

<php> ... <ini name="memory_limit" value="-1"/> ...

答案 15 :(得分:-1)

您可以使用:     git remote -v

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

  

管理您跟踪其分支的存储库集(“遥控器”)。   -v   --verbose稍微冗长一点,并在名字后显示远程网址。注意:必须将其放在remote和subcommand之间。