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

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

4001177 次浏览

要仅获取远程URL:

git config --get remote.origin.url

如果您需要完整的输出,并且您所在的网络可以到达源所在的远程存储库:

git remote show origin

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

C:\Users\jaredpar\VsVim> git remote show origin* remote originFetch URL: git@github.com:jaredpar/VsVim.gitPush  URL: git@github.com:jaredpar/VsVim.gitHEAD branch: masterRemote branches:

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

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

这只给出了URL,这对脚本目的很有用:

git config --get remote.origin.url

这将打印所有遥控器的获取/推送URL:

git remote -v

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

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

简短的回答:

$ 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

感谢@陈志立指出这一点。

上游的远程可能不被称为“起源”,所以这里有一个变体:

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

为了得到答案:

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

这比阅读配置要好;参考手册页#0

#获取链接

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

正如@Jefromi所指出的,此选项是在v1.7.5中添加的,直到V1.7.12.2(2012-09)才记录在案。

综上所述,至少有四种方法:

使用官方Linux库试用:

最少信息:

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

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

更多信息:

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

更多信息:

$ git remote show origin* remote originFetch URL: https://github.com/torvalds/linux.gitPush  URL: https://github.com/torvalds/linux.gitHEAD branch: masterRemote branch:master trackedLocal branch configured for 'git pull':master merges with remote masterLocal ref configured for 'git push':master pushes to master (up to date)

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

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

git remote get-url origin

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

参见提交96f78d3(2015年9月16日)byBen Boeckel(#0)
(合并于提交e437cbd中的Junio C Hamano----#0----,2015年10月5日)

远程:添加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].urlgit ls-remote --get-url [REMOTE]git remote show [REMOTE]

补充其他答案:如果远程由于某种原因被更改,因此没有反映原始的原点,则reflg中的第一个条目(即命令git reflog显示的最后一个条目)应该指示repo最初是从哪里克隆的。

e. g.

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

(请记住,reflg可能会被清除,所以这不能保证有效。

使用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'

您只获得没有前面的普通URL

"url="

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

您可以在其使用中获得更多可能性:

示例

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

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

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

cat .git/config

要编辑:

vim .git/config

nano .git/config

如果您不知道分支的上游远程名称,您可以首先通过检查构建当前分支的上游分支名称来查找。像这样使用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)

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

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

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

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

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

project_dir/.git/config

注意:即使您离线或远程Git服务器已关闭,这也可以工作。

我基本上使用:

git remote get-url origin

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

#!/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; thenprintf "%s\n" "Error: not a valid remote name" && return 1# Verify remote using 'git remote -v' commandfi
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 HTTPSgit clone git@github.com:your-username/your-repository.gitcd your-repository
git-remote-url origin

输出:

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

我永远无法记住Git命令的所有参数,所以我只是在~/.gitconfig文件中放了一个对我更有意义的别名,这样我就可以记住它,它会导致更少的键入:

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

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

> git url

以下是我经常使用的几个:

[alias]cd = checkoutls = branchlsr = branch --remotelst = describe --tags

我还强烈推荐临时演员,它有一个git info命令,它提供了有关远程和本地分支的更详细信息。

对我来说,这是更简单的方法(更少打字):

git remote -v

输出:

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

实际上,我把它变成了一个名为salias

git remote -vgit status

您可以添加到您的个人资料:

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

git config --list

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

简单。只需使用此命令放置. git文件夹:

git config --get remote.origin.url

如果您连接到网络,

git remote show origin

它将向您显示最初克隆本地Git存储库的URL。

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

git config -l

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

user.name=Your Nameuser.email=your.name@notexisting.comcore.autocrlf=inputcore.repositoryformatversion=0core.filemode=truecore.bare=falsecore.logallrefupdates=trueremote.origin.url=https://github.com/mapstruct/mapstruct-examplesremote.origin.fetch=+refs/heads/*:refs/remotes/origin/*branch.master.remote=originbranch.master.merge=refs/heads/master

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

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

但是您想获取一个HTTP URL以在浏览器中打开它或共享它:

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并不重要。

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. bashrc文件中。

之后,您可以使用喜欢

git-repogit-pr

要仅获取远程URL:

git config --get remote.origin.url

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

git remote show [remote-name] command

要查看远程URL:

git remote show origin

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

git config --get remote.origin.url