如何确定最初从中克隆本地Git存储库的URL?


4091

我几天前从GitHub提取了一个项目。从那以后,我发现GitHub上有多个分支,而我却忽略了我最初选的那个分支。如何确定我拉了哪些叉子?


162
随着git 2.7(2015年第四季度),git remote get-url origin将成为可能。请在下面
VonC 2015年


21
git remote get-url origin对我不起作用-可能已弃用?git remote show origin虽然工作。
Klik

46
git remote -v给您很多信息,包括此信息。
托尔比约恩Ravn的安徒生

git remote get-url origin --push工作正常,显然没有贬值,并提供了很好的简短信息(git remote show origin可能非常冗长)qv git help remote
NeilG

Answers:


5753

如果只需要远程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
如果将jgit与amazon-s3结合使用,请按照以下说明使用git config。
barryku 2012年

6
尽管与原始问题的目的无关,但请注意,如果尝试获取“推送URL”并且为指定的远程输入了多个URL,则您都需要使用git remote show origin(可选地使用@提供的-n标志凯西(Casey),或git remote -v@Montaro和@rodel建议。
2014年

此文件写入哪个文件?我以为该.gitconfig文件将具有该文件,但是我没有在我的文件中看到它。
2014年

1
@ayjay ´~/.gitconfig对于所有git存储库都是全局的,这里来自通常位于其中的本地配置.git/config(但是对于git-submodules来说,答案要困难一些)。请注意,这strace git config --get remote.origin.url是您的朋友。
蒂诺2014年

1
但是原始URL不必是当前使用的遥控器的URL。要显示实际使用的URL,则需要以下解决方案:stackoverflow.com/a/40630957/1069083
rubo77 '16

620

如果您出于脚本目的需要这样做,则只能使用

git config --get remote.origin.url

38
这是正确的答案。如果远程URL不再可用,则它速度更快,甚至可以工作(git remote show origin仅显示“ conq:存储库不存在”)。
apfelbox

5
由于config选项,这不是一个正确的答案url.<base>.insteadOf。看到我的答案-git有一个用于此目的的命令。
卡尔·苏斯特

2
@arcresu很酷,为您+1!在我的辩护中,直到2011年3月才添加该命令,直到2012
。– Cascabel 2013年

1
@Catskul仅--git-dir是相关的(配置位于git dir中,与工作树位置无关),它确实对我有用。您确定指定的是实际.git目录的路径,而不是其父目录的路径吗?
卡斯卡贝尔2014年

553

你可以试试:

git remote -v

它将打印您所有遥控器的获取/推送URL。


255

获得答案:

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

这比阅读配置要好。请参考手册页git-ls-remote

--get-url

考虑到任何"url.<base>.insteadOf"配置设置(请参阅参考资料git-config(1)),展开给定远程存储库的URL,然后退出而不与远程服务器对话。

正如@Jefromi指出的那样,此选项已在v1.7.5中添加,直到v1.7.12.2(2012-09)才被记录


2
好人:这也将为以前的版本提供相同的功能> git remote -v | grep fetch | awk'{print $ 2}'
ravi.zombie

1
我认为大多数其他答案更多是关于git命令的演说和关于git历史的说明。这是唯一不假定您的上游被调用的答案origin
Mike D

这是旧remote get-url选项的最直接替代。这是一个即插即用的替代品。
克拉图·冯·施拉克

111

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

git remote get-url origin

(的漂亮的吊坠git remote set-url origin <newurl>

参见Ben Boeckel()提交的96f78d3(2015年9月16日(由Junio C Hamano合并--commit e437cbd中,2015年10月5日)mathstuf
gitster

远程:添加get-url子命令

扩展insteadOf是扩展的一部分,ls-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]

4
五年后,发生了很多变化,这应该是现在可以接受的答案。但也许还要添加2.7之前的语法。
msp 2015年

58

总结起来,至少有四种方式:

(以下是针对官方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)

4
git config --get remote.origin.url检索其设置与原来的URL git remote add ...git remote set-url ...同时git ls-remote --get-url origin检索这实际上是用来访问远程数据库的URL -这可能是在不同的存在git config --global url.XXX.insteadOf YYY因此,两个输出可能不同! 另外请注意,git ls-remote --get-url(无origin)并不一定要检索origin,而是显示跟踪的上游,因此它将失败,例如在分离的HEAD状态下。
蒂诺2014年


22

简短答案:

$ git remote show -n origin

或者,纯快速脚本的替代方法:

$ git config --get remote.origin.url

一些信息:

  1. $ git remote -v将打印所有遥控器(不是您想要的)。您想要原产地吗?
  2. $ git remote show origin更好,仅显示origin但花费的时间太长(在git版本1.8.1.msysgit.1上测试)。

我最后得到了:$ git remote show -n origin,这似乎是最快的。使用-n它不会获取远程磁头(AKA分支)。您不需要这种类型的信息,对吗?

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 remote -v
origin    https://github.com/torvalds/linux.git (fetch)
origin    https://github.com/torvalds/linux.git (push)

实际上,我已经将其放入了一个可以执行的alias调用s中:

git remote -v
git status

您可以使用以下方法添加到您的个人资料: alias s='git remote -v && git status'


17

我永远都不记得Git命令的所有参数,所以我只是在~/.gitconfig文件中放了一个别名,该别名对我来说更有意义,因此我可以记住它,并且键入的次数更少:

[alias]
url = ls-remote --get-url

重新加载终端后,您只需键入:

> git url

这是我经常使用的一些:

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

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


我非常喜欢这个!
阿菲(Alfie)

15

Git URL将在Git配置文件中。该值对应于键url

对于Mac和Linux,请使用以下命令:

 cd project_dir
 cat .git/config | grep url | awk '{print $3}'

对于Windows,在任何文本编辑器中打开以下文件,然后找到key的值url

project_dir/.git/config

注意:即使您处于离线状态或远程git服务器已关闭,这也将起作用。


1
一旦托管原始签出的远程服务器被关闭,这就是对我有用的方法。其他所有尝试均失败:git remote get-url origin >> fatal: No such remote 'origin'git config --get remote.origin.url >>
jxramos

14

我基本上使用:

git remote get-url origin

它适用于Windows中的Git Bash命令控制台或CMD命令控制台。也就是说,它适用于Git 2.x版本。



10

上游的遥控器可能不称为“来源”,因此有一个变体:

remote=$(git config --get branch.master.remote)
url=$(git config --get remote.$remote.url)
basename=$(basename "$url" .git)
echo $basename

要么:

basename $(git config --get remote.$(git config --get branch.master.remote).url) .git

对于更有用的变量,有:

$ git config -l

9

获取的IP地址/主机名 origin

对于ssh://存储库:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d "/"

对于git://存储库:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d ":"

4
为此,ssh仅在没有~/.ssh/config重写主机名或别名的情况下才起作用。
蒂诺2014年

9

作为其他答案的补充:如果由于某种原因更改了遥控器,但未反映原始来源,则reflog中的第一个条目(即命令显示的最后一个条目git reflog)应指出存储库最初的复制位置。从。

例如

$ git reflog | tail -n 1
f34be46 HEAD@{0}: clone: from https://github.com/git/git
$

(请记住,刷新日志可能会被清除,因此不能保证此工作正常。)


1
如果已更改“原始”遥控器,这可能是唯一的真正方法。
贾斯汀·欧姆斯

8

随着git remote show origin你必须在项目目录。但是,如果要从其他任何地方确定URL,则可以使用:

cat <path2project>/.git/config | grep url

如果经常需要此命令,则可以在您的MacOS .bashrc.bash_profileMacOS中定义一个别名。

alias giturl='cat ./.git/config | grep url'

因此,您只需要调用giturlGit根文件夹即可简单地获取其URL。


如果您像这样扩展这个别名

alias giturl='cat .git/config | grep -i url | cut -d'=' -f 2'

您只获得纯URL,而没有前面的URL

“ url =”

url = http://example.com/repo.git

您将获得更多使用可能性:

在Mac上,您可以调用open $(giturl)以在标准浏览器中打开URL。

chrome $(giturl)使用Linux上的Chrome浏览器打开它。



7

打印任意命名的远程获取URL:

git remote -v | grep fetch | awk '{print $2}'

6

如果您不知道分支的上游远程服务器的名称,则可以通过检查当前分支所基于的上游分支名称来首先查找。git rev-parse像这样使用:

git rev-parse --symbolic-full-name --abbrev-ref @{upstream}

这表明上游分支是当前分支的源。可以这样解析以获取远程名称:

git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1

现在,将其传递给git ls-remote您,您将获得作为当前分支源的上游远程站点的URL:

git ls-remote --get-url \
  $(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1)

现在应该注意,这不必与从其克隆的源远程存储库相同。但是,在许多情况下,这就足够了。


5
#!/bin/bash

git-remote-url() {
 local rmt=$1; shift || { printf "Usage: git-remote-url [REMOTE]\n" >&2; return 1; }
 local url

 if ! git config --get remote.${rmt}.url &>/dev/null; then
  printf "%s\n" "Error: not a valid remote name" && return 1
  # Verify remote using 'git remote -v' command
 fi

 url=`git config --get remote.${rmt}.url`

 # Parse remote if local clone used SSH checkout
 [[ "$url" == git@* ]] \
 && { url="https://github.com/${url##*:}" >&2; }; \
 { url="${url%%.git}" >&2; };

 printf "%s\n" "$url"
}

用法:

# Either launch a new terminal and copy `git-remote-url` into the current shell process, 
# or create a shell script and add it to the PATH to enable command invocation with bash.

# Create a local clone of your repo with SSH, or HTTPS
git clone git@github.com:your-username/your-repository.git
cd your-repository

git-remote-url origin

输出:

https://github.com/your-username/your-repository

5

我更喜欢这个,因为它更容易记住:

git config -l

它将列出所有有用的信息,例如:

user.name=Your Name
user.email=your.name@notexisting.com
core.autocrlf=input
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=https://github.com/mapstruct/mapstruct-examples
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

1

只需在您的.git文件夹所在的位置使用此命令即可

git config --get remote.origin.url

如果您已连接到网络

git remote show origin

它将显示原始克隆本地Git存储库的URL。

希望这个帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.