当您在某个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
答案 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之间。