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

时间:2010-11-03 16:47:46

标签: git github git-remote

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

26 个答案:

答案 0 :(得分:4789)

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

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

答案 1 :(得分:562)

如果您希望将其用于脚本编写目的,则只能使用

获取URL
git config --get remote.origin.url

答案 2 :(得分:479)

您可以尝试:

git remote -v

它将打印所有遥控器的提取/推送网址。

答案 3 :(得分:231)

得到答案:

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

这比阅读配置更好;请参阅man page for git-ls-remote

  

<强> - 得到-网址

     

考虑到扩展给定远程存储库的URL   任何"url.<base>.insteadOf"配置设置(请参阅git-config(1))和   退出而不与遥控器通话。

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

答案 4 :(得分:89)

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

git remote get-url origin

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

commit 96f78d3Ben Boeckel (mathstuf)(2015年9月16日) (由Junio C Hamano -- gitster --合并于commit e437cbd,2015年10月5日)

  

remote:添加get-url子命令

     

展开insteadOfls-remote --url的一部分,没有办法   也扩展pushInsteadOf   添加get-url子命令以便能够查询这两个子命令以及获取所有已配置URL的方法。

get-url:
  

检索遥控器的URL   此处扩展了insteadOfpushInsteadOf的配置   默认情况下,仅列出第一个URL。

     
      
  • 使用“--push”,系统会查询推送网址,而不是提取网址。
  •   
  • 使用“--all”,将列出遥控器的所有网址。
  •   

在git 2.7之前,你有:

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

答案 5 :(得分:51)

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

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

答案 6 :(得分:20)

简短回答:

$ 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上测试过)。
  3. 我最终得到:$ git remote show -n origin,这似乎是最快的。使用-n时,它不会获取远程头(AKA分支)。你不需要那种类型的信息,对吗?

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

    您可以将| grep -i fetch应用于所有三个版本,以仅显示提取网址。

    如果您需要纯粹的速度,请使用:

    $ git config --get remote.origin.url
    

    感谢@Jefromi指出了这一点。

答案 7 :(得分:18)

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

答案 8 :(得分:10)

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

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

答案 9 :(得分:10)

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

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

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

对于Windows,请在任何文本编辑器中打开以下文件,并找到键url的值。

project_dir/.git/config

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

答案 10 :(得分:9)

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

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

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

即可
> git url

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

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

答案 11 :(得分:8)

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

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

答案 12 :(得分:8)

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

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

实际上,我将其放入名为alias的{​​{1}}中,该操作是:

s

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

答案 13 :(得分:8)

我基本上使用:

git remote get-url origin

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

答案 14 :(得分:7)

获取origin

的IP地址/主机名

对于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 ":"

答案 15 :(得分:7)

补充其他答案:如果遥控器由于某种原因被更改,因此未反映原始来源,则是reflog中的第一个条目(即显示的最后一个条目)命令git reflog)应指明最初克隆回购的位置。

e.g。

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

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

答案 16 :(得分:6)

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

cat .git/config

编辑:

vim .git/config

nano .git/config

答案 17 :(得分:6)

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

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

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

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

所以你只需要在Git根文件夹中调用giturl,以便只获取其URL。

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

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

您只获得没有前面的

的普通网址
  

&#34; URL =&#34;

in

  

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

您可以使用它的更多可能性:

示例

在Mac上,您可以拨打open $(giturl)在标准浏览器中打开网址。

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

答案 18 :(得分:5)

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

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

答案 19 :(得分:4)

如果您不知道分支的上游远程名称,可以先查看当前分支所依据的上游分支名称。像这样使用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)

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

答案 20 :(得分:3)

#!/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

答案 21 :(得分:2)

您使用SSH克隆克隆了您的存储库。

git config --get remote.origin.url
git@gitlab.com:company/product/production.git

但是您想获取http网址以在浏览器中打开它或共享它:

git config --get remote.origin.url | sed -e 's/:/\//g'| sed -e 's/ssh\/\/\///g'| sed -e 's/git@/https:\/\//g'

https://gitlab.com/company/product/production.git

GitHub或GitLab没关系。

答案 22 :(得分:2)

仅获取远程 URL:

git config --get remote.origin.url

要获得有关特定遥控器的更多详细信息,请使用

git remote show [remote-name] command

查看远程网址

git remote show origin

查看 .git 文件夹放置的位置

git config --get remote.origin.url

答案 23 :(得分:1)

简单地使用此命令,将.git文件夹放在其中

git config --get remote.origin.url

如果您已连接到网络

git remote show origin

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

希望获得帮助

答案 24 :(得分:1)

alias git-repo="git config --get remote.origin.url | sed -e 's/:/\//g'| sed -e 's/ssh\/\/\///g'| sed -e 's/git@/https:\/\//g'"
alias git-pr="git config --get remote.origin.url | sed -e 's/:/\//g'| sed -e 's/ssh\/\/\///g'| sed -e 's/git@/https:\/\//g' | sed 's/....$//' | sed -ne 's/$/\/pulls &/p'"

将此表达式添加到主目录的 .zshrc 或 .bashrcs 中

之后你可以使用like

git-repo
git-pr

答案 25 :(得分:0)

git config --list

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