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

Tim 3782 git github git-remote

几天前我从GitHub上撤了一个项目.我已经发现GitHub上有几个叉子,我忽略了我最初采用的那个.如何确定我拉出的哪个叉子?

JaredPar.. 5344

如果只想要远程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:

如果要使用脚本中的值,可以使用此答案中列出的第一个命令.

  • 虽然与原始问题的目的无关,但请注意,如果尝试获取"推送URL"并为指定的遥控器输入多个URL,则您需要使用`git remote show origin`(可选择使用@Casey提供-n标志,或@Montaro和@rodel建议的`git remote -v`. (4认同)
  • 如果将jgit与amazon-s3一起使用,请使用git config,如下所述. (2认同)

Cascabel.. 600

如果您希望将此用于脚本编写,则只能获取URL

git config --get remote.origin.url

  • 这是正确的答案.如果远程网址不再可用,它会更快,甚至可以工作(`git remote show origin`只显示"conq:repository不存在."). (36认同)
  • 由于配置选项`url.<base> .insteadOf`,这不是正确的答案.看到我的回答 - git有一个命令用于此目的. (3认同)
  • @arcresu酷,给你+1!在我的辩护中,该命令直到2011年3月才被添加,直到2012年9月才被记录. (2认同)

Montaro.. 522

你可以试试:

git remote -v

它将打印所有遥控器的提取/推送URL.


Carl Suster.. 244

得到答案:

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)才记录.

  • 好的:这也可以为以前的版本提供相同的> git remote -v | grep fetch | awk'{print $ 2}' (2认同)

VonC.. 104

使用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合并- -提交e437cbd,2015年10月5日):mathstuf
gitster

remote:添加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]

  • 经过5年后,很多事情发生了变化,这应该是现在接受的答案.但也许可以添加2.7之前的语法. (4认同)

nopole.. 56

总而言之,至少有四种方式:

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

  • 注意`git config --get remote.origin.url`检索用`git remote add ...`或`git remote set-url ...`设置的原始URL,而`git ls-remote --get- url origin`检索实际用于访问远程的URL - 在存在`git config --global url.XXX.insteadOf YYY`时可能会有所不同.**所以两个输出可能会有所不同!**还要注意``git ls-remote --get-url`(没有`origin`)不一定会检索`origin`,而是显示被跟踪的上游,所以它会失败分离HEAD状态的示例. (4认同)

meder omural.. 23

我认为你可以找到它.git/config,remote["origin"]如果你没有操纵它.


Casey.. 21

简短回答:

$ 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指出这一点.


小智.. 16

对我来说,这是更简单的方法(无需输入):

$ 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'


Harikrishnan.. 14

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

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

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


What Would B.. 14

我永远不会记住Git命令的所有参数,所以我只是在~/.gitconfig文件中添加了一个对我来说更有意义的别名,所以我记得它,并且它导致更少的输入:

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

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

> git url

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

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


maytham-ɯɐɥʇ.. 12

我主要使用:

git remote get-url origin

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


cagney.. 9

上游的遥控器可能不被称为"原点",所以这里有一个变化:

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


Stephen.. 8

获取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 ":"

  • 对于`ssh`,这只能在没有`〜/ .ssh/config`的情况下工作,它会重写主机名或别名. (4认同)

Jeremy.. 8

为了补充其他答案:如果遥控器由于某种原因被更改,因此不能反映原始原点,则reflog中的第一个条目(即命令显示的最后一个条目git reflog)应指示最初克隆repo的位置从.

例如

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

(请记住,可能会清除reflog,因此无法保证其正常工作.)


Sedat Kilinc.. 7

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

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

如果您经常需要此命令,则可以在MacOS 中.bashrc.bash_profile使用MacOS 定义别名.

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

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


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

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

你只得到没有前面的普通URL

"URL ="

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

你有更多的使用可能性:

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

或者chrome $(giturl)在Linux上使用Chrome浏览器打开它.


Omar Makled.. 7

一种简单的方法是打开.git/config文件:

cat .git/config

编辑:

vim .git/config 要么

nano .git/config


小智.. 7

git config --list

该命令将提供与您的存储库相关的所有信息。


Aron.. 6

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

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


Christopher.. 5

如果您不知道分支的上游远程名称,则可以通过检查当前分支所基于的上游分支名称来首先查找。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)

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