如何确定本地 Git 仓库最初克隆自哪个 URL

5360

我从GitHub上拉取了一个有几个分支的项目,但忘记了是哪个分支。如何确定我拉取的是哪个分支?


277
从 git 2.7 (Q4 2015) 开始,将可以使用 git remote get-url origin 命令。请参见我的回答 - VonC
36
git remote get-url origin 对我不起作用,可能已经过时了?但 git remote show origin 可以用。 - Klik
80
git remote -v 会给你很多信息,包括这个。 - Thorbjørn Ravn Andersen
3
git remote get-url origin --push 命令运行正常,显然没有被弃用,并且提供了简洁明了的信息(相比之下, git remote show origin 很冗长),详见 git help remote - NeilG
27个回答

7473

仅获取远程URL:

git config --get remote.origin.url
如果您需要完整的输出,并且您所在的网络可以到达远程存储库所在的远程仓库:
git remote show origin

使用git clone(从GitHub或任何源存储库)时,克隆的来源默认名称为“origin”。 使用git remote show将显示有关此远程名称的信息。 前几行应该显示:

C:\Users\jaredpar\VsVim> git remote show origin
* remote origin
  Fetch URL: git@github.com:jaredpar/VsVim.git
  Push  URL: git@github.com:jaredpar/VsVim.git
  HEAD branch: master
  Remote branches:

如果您想在脚本中使用该值,您将使用此答案中列出的第一个命令。


2
如果使用Amazon S3和jgit,请改用下面描述的git config。 - barryku
7
请注意,虽然与原问题的目的无关,但如果尝试获取“Push URL”并为指定的远程输入多个URL,则需要使用git remote show origin(可选地提供@Casey提供的-n标志),或者像@Montaro和@rodel建议的那样使用git remote -v - Amazingant
2
@ayjay ´~/.gitconfig 是全局的,适用于所有的 git 仓库,而这里的配置来自本地配置文件,通常在 .git/config 中(但对于 git 子模块,答案会有些困难)。请注意,strace git config --get remote.origin.url 可以帮助你。 - Tino
1
但是原始URL不必是当前使用的远程URL。要显示实际使用的URL,您需要使用以下解决方案:https://dev59.com/_XVC5IYBdhLWcg3w1Exq#40630957 - rubo77
2
注意:如果存储的凭据不再具有访问原始存储库所需的访问权限,则方法“git remote show origin”无法正常工作。在这种情况下,请尝试“git remote -v”。 - Cédric Françoys
显示剩余6条评论

763

这个只提供URL地址,方便用于脚本编写:

git config --get remote.origin.url

56
这是正确答案。它比较快,并且即使远程URL不再可用(git remote show origin只显示“conq: repository does not exist.”),它也可以正常工作。 - apfelbox
10
这不完全是正确的答案,因为涉及到配置选项url.<base>.insteadOf。请查看我的回答——git有一个针对此目的的命令。 - Carl Suster
1
@MateenUlhaq 在这种情况下我并不在意,但是一般来说请避免纯粹的风格编辑 - 作者可以自由地按照他们喜欢的风格写作,只要清晰明了即可。 - Cascabel
1
要更改此内容,请执行以下操作:**git remote set-url origin http://..... ** 或者,查看此处的更多说明:[https://docs.github.com/en/get-started/getting-started-with-git/managing-remote-repositories]。 并且,如果这可能是许多人想要做的事情,请点赞此评论。 - Kevin J. Rice

752
这将打印出您所有远程仓库的fetch/push URL地址:
git remote -v

1
@Montaro 正确,如果没有它,只会打印远程的名称(例如 origin)。 - CPHPython

320

获取答案的方法:

git ls-remote --get-url [REMOTE]

这比阅读配置要更好,可参考git-ls-remote的手册页面

--get-url

展开给定远程仓库的URL时将考虑任何"url.<base>.insteadOf"配置设置(请参见git-config(1)),并且在不与远程通信的情况下退出。

正如@Jefromi所指出的那样,此选项在v1.7.5中添加,但直到v1.7.12.2(2012-09)才有文档记录。


2
这也会为之前的版本提供相同的功能: > git remote -v| grep fetch|awk '{print $2}' - ravi.zombie
2
我认为大多数其他答案更像是展示和讲解git命令以及git历史的表述。这是唯一一个不假设您的上游称为“origin”的答案。 - Mike D
这是旧的“remote get-url”选项的最直接替代品。它是一个即插即用的替换。 - Klaatu von Schlacker

165

自Git 2.7(2015年1月5日发布)起,您可以使用更一致的解决方案,使用git remote:

git remote get-url origin

(git remote set-url origin <newurl> 的好用的垂饰)

参见 Ben Boeckel (mathstuf) 于2015年9月16日提交的 提交记录 96f78d3
(由Junio C Hamano -- gitster --于2015年10月05日在 提交记录 e437cbd 中合并):

remote: 添加 get-url 子命令

扩展 insteadOfls-remote --url 的一部分,而没有方法来扩展 pushInsteadOf
添加 get-url 子命令以查询两者以及获取所有配置的URL的方式。

get-url:

检索远程的URL。
insteadOfpushInsteadOf 的配置在此处被展开。
默认情况下,仅列出第一个URL。

  • 使用 '--push',将查询推送URL而不是获取URL。
  • 使用 '--all',将列出远程所有的URL。

在 git 2.7 之前,你可以使用:

 git config --get remote.[REMOTE].url
 git ls-remote --get-url [REMOTE]
 git remote show [REMOTE]

146

总结一下,至少有四种方法:

通过官方的 Linux 软件仓库尝试使用它:

最少信息:

$ git config --get remote.origin.url
https://github.com/torvalds/linux.git

$ git ls-remote --get-url
https://github.com/torvalds/linux.git

更多信息:

$ git remote -v
origin    https://github.com/torvalds/linux.git (fetch)
origin    https://github.com/torvalds/linux.git (push)

更多信息:

$ git remote show origin
* remote origin
  Fetch URL: https://github.com/torvalds/linux.git
  Push  URL: https://github.com/torvalds/linux.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

10
请注意,git config --get remote.origin.url 命令用于检索与 git remote add ...git remote set-url ... 命令设置的原始 URL 相同的 URL。而 git ls-remote --get-url origin 命令用于检索用于访问远程仓库的实际 URL,这可能会在存在 git config --global url.XXX.insteadOf YYY 时不同。因此,两个命令的输出可能不同。另请注意,git ls-remote --get-url(不包括 origin)不一定检索 origin,而是显示被跟踪的上游分支,因此在分离 HEAD 状态下将无法检索到该命令的输出。 - Tino
不再支持 - Hossein

44

对我来说,这是更轻松的方式(打字更少):

git remote -v

输出:

origin    https://github.com/torvalds/linux.git (fetch)
origin    https://github.com/torvalds/linux.git (push)

实际上,我已将其转换为一个称为salias,它执行以下操作:

git remote -v
git status

你可以通过以下方式将其添加到你的个人资料中:

alias s='git remote -v && git status'


31

如果您没有更改过,我认为您可以在.git/configremote["origin"]下找到它。


27

简短回答:

$ git remote show -n origin

或者,纯快速脚本的另一种选择:
$ git config --get remote.origin.url

一些信息:

  1. $ git remote -v将打印所有远程库(不是您想要的)。 您只需要 origin,对吧?
  2. $ git remote show origin更好,仅显示 origin 但速度太慢(在git版本1.8.1.msysgit.1上测试过)。

我最终使用了:$ git remote show -n origin,这似乎是最快的。使用-n,它将不会获取远程头(也称为分支)。 您不需要那种类型的信息,对吧?

http://www.kernel.org/pub//software/scm/git/docs/git-remote.html

你可以对所有三个版本应用 | grep -i fetch 命令来仅显示提取URL。
如果你需要纯速度,那么使用:
$ git config --get remote.origin.url

感谢@Jefromi指出这一点。


22

我总是记不住Git命令的所有参数,所以我只是在~/.gitconfig文件中设置了一个别名,这样更符合我的理解,我就能记得住它,并且少打一些字:

[alias]
url = ls-remote --get-url
重新加载终端后,然后只需输入以下命令即可:

After reloading the terminal, you can then just type:


> git url

以下是我经常使用的一些:

[alias]
cd = checkout
ls = branch
lsr = branch --remote
lst = describe --tags

我还强烈推荐 git-extras,它有一个 git info 命令,可以提供更详细的关于远程和本地分支的信息。


1
不错的别名,我喜欢它们与 bash 命令非常自然地融合在一起。当在 bashgit 之间切换时,我可以看到这会造成最少的思维阻力。太棒了! - seeker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接