找出您在 Git 中克隆的原始存储库的名称

当您使用以下语法进行第一次克隆时

git clone username@server:gitRepo.git

有没有可能使用您的本地存储库来查找初始克隆的名称?

(因此,在上面的示例中,查找 gitRepo.git。)

159948 次浏览

在存储库根目录中,.git/config文件保存有关远程存储库和分支的所有信息。在你的例子中,你应该寻找这样的东西:

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = server:gitRepo.git

此外,Git 命令 git remote -v显示远程存储库名称和 URL。“原始”远程存储库通常对应于克隆本地副本的原始存储库。

这是一个快速的 Bash 命令,您可能正在搜索它, 将只打印远程存储库的基名:

你在哪里取得 来自:

basename $(git remote show -n origin | grep Fetch | cut -d: -f2-)

或者按下 :

basename $(git remote show -n origin | grep Push | cut -d: -f2-)

特别是 -n选项使得命令更快。

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

测试了三种不同的 URL 样式:

echo "Fetch URL: http://user@pass:gitservice.org:20080/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
echo "Fetch URL: Fetch URL: git@github.com:home1-oss/oss-build.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'
echo "Fetch URL: https://github.com/owner/repo.git" | ruby -ne 'puts /^\s*Fetch.*(:|\/){1}([^\/]+\/[^\/]+).git/.match($_)[2] rescue nil'

我用这个:

basename $(git remote get-url origin) .git

它返回类似于 gitRepo的内容(删除命令末尾的 .git以返回类似于 gitRepo.git的内容)

(注意: 需要 Git 2.7.0或更高版本)

我无意中发现了这个问题,试图从 gitub 或 gitlab 这样的 git 主机获取 organization/repo字符串。

这对我很有效:

git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).git/\1/'

它使用 sedgit config命令的输出替换为组织和回购名称。

在正则表达式中,类似于 github/scientist的东西将与字符类 [[:graph:]]匹配。

\1告诉 sed 用匹配的字符替换所有内容。

为清晰起见:

如果 远程,原创,网址的格式为 Protocol://auth _ info@git _ host: port/project/repo.git,那么这将用于获取该值。如果您发现它不工作,调整 F5选项,这是第一个 cut 命令的一部分。

对于 Protocol://auth _ info@git _ host: port/project/repo.git远程,原创,网址示例,由 命令创建的输出将包含以下内容:

- f1: 协议: - f2: (空白) - f3: auth _ info@git _ host: port - f4: 项目 - f5: repo.git

如果遇到问题,请查看 git config --get remote.origin.url命令的输出,看看哪个字段包含原始存储库。如果 远程,原创,网址不包含 。 git字符串,那么省略第二个 命令的管道。

#!/usr/bin/env bash
repoSlug="$(git config --get remote.origin.url | cut -d/ -f5 | cut -d. -f1)"
echo ${repoSlug}

Git repo name 命令的 Powershell 版本:

(git config --get remote.origin.url) -replace '.*/' -replace '.git'
git ls-remote --get-url | xargs basename         # gitRepo.git
git ls-remote --get-url | xargs basename -s .git # gitRepo


# zsh
git ls-remote --get-url | read
print $REPLY:t   # gitRepo.git
print $REPLY:t:r # gitRepo