我在 GitHub 上提取了一个包含多个 fork 的项目,但忘记了它是哪个 fork。我如何确定我拉了哪个叉子?
git remote get-url origin
将成为可能。请参阅my answer below
git remote get-url origin
对我不起作用——可能已弃用? git remote show origin
虽然有效。
git remote -v
为您提供了很多信息,包括这些。
git remote get-url origin --push
工作正常,显然没有贬值,并提供了很好的简短信息(git remote show origin
可以非常 冗长)qv git help remote
。
如果您只需要远程 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
git config --get remote.origin.url
git remote show origin
只显示“conq:存储库不存在。”),它会更快,甚至可以工作。
url.<base>.insteadOf
,这不是完全正确的答案。请参阅我的回答 - git 有一个用于此目的的命令。
你可以试试:
git remote -v
它将打印所有遥控器的获取/推送 URL。
origin
)。
要得到答案:
git ls-remote --get-url [REMOTE]
这比读取配置要好;请参阅man page for git-ls-remote
:
--get-url 扩展给定远程存储库的 URL,考虑任何“url.
正如@Jefromi 所指出的,此选项是在 v1.7.5 中添加的,直到 v1.7.12.2 (2012-09) 才记录在案。
origin
的答案。
remote get-url
选项的最直接替代。这是一个插入式的替代品。
借助 Git 2.7(2015 年 1 月 5 日发布),您可以使用 git remote
获得更一致的解决方案:
git remote get-url origin
(git remote set-url origin <newurl>
的漂亮吊坠)
请参阅 Ben Boeckel (mathstuf
) 的commit 96f78d3(2015 年 9 月 16 日)。
(由 Junio C Hamano -- gitster
-- 在 commit e437cbd 中合并,2015 年 10 月 5 日):
remote: add get-url 子命令 Expanding insteadOf 是 ls-remote --url 的一部分,也无法扩展 pushInsteadOf 。添加一个 get-url 子命令,以便能够同时查询以及获取所有已配置 URL 的方法。
get-url:
检索远程的 URL。此处扩展了 insteadOf 和 pushInsteadOf 的配置。默认情况下,仅列出第一个 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]
总结起来,至少有四种方式:
使用官方 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 状态下.
我认为如果您不对其进行操作,您可以在 .git/config
和 remote["origin"]
下找到它。
对我来说,这是更简单的方法(少打字):
$ git remote -v
origin https://github.com/torvalds/linux.git (fetch)
origin https://github.com/torvalds/linux.git (push)
实际上,我已将其放入名为 s
的 alias
中:
git remote -v
git status
您可以通过以下方式添加到您的个人资料:alias s='git remote -v && git status'
简短的回答:
$ git remote show -n origin
或者,纯快速脚本的替代方案:
$ git config --get remote.origin.url
一些信息:
$ git remote -v 将打印所有遥控器(不是你想要的)。你想要起源对吗? $ 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指出这一点。
我更喜欢这个,因为它更容易记住:
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
我永远记不住 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
command,它提供了有关远程和本地分支的更详细的信息。
bash
命令自然融合的方式。我可以看到这在 bash
和 git
之间切换时造成的心理摩擦最小。太棒了!
我基本上使用:
git remote get-url origin
它适用于 Windows 中的 Git Bash 命令控制台或 CMD 命令控制台。也就是说,它适用于 Git 2.x 版本。
Git URL 将位于 Git 配置文件中。该值对应于键 url
。
对于 Mac 和 Linux,请使用以下命令:
cd project_dir
cat .git/config | grep url | awk '{print $3}'
对于 Windows,在任何文本编辑器中打开以下文件并找到键 url
的值。
project_dir/.git/config
注意:即使您处于离线状态或远程 git 服务器已关闭,这也将起作用。
git remote get-url origin >> fatal: No such remote 'origin'
、git config --get remote.origin.url >>
git config --list
此命令将提供与您的存储库相关的所有信息。
上游的远程可能不被称为“起源”,所以这里有一个变体:
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/config
文件:
cat .git/config
编辑:
vim .git/config
或
nano .git/config
获取源的 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 ":"
ssh
,这仅在没有重写主机名或别名的 ~/.ssh/config
时有效。
补充其他答案:如果遥控器由于某种原因已更改,因此不反映 original 来源,则 reflog 中的第一个条目(即命令 {1 显示的最后一个条目}) 应该指出 repo 最初是从哪里克隆的。
例如
$ git reflog | tail -n 1
f34be46 HEAD@{0}: clone: from https://github.com/git/git
$
(请记住,reflog 可能会被清除,所以这不能保证有效。)
使用 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=http://example.com/repo.git
您在其使用中获得更多可能性:
例子
在 Mac 上,您可以调用 open $(giturl)
在标准浏览器中打开 URL。
或 chrome $(giturl)
在 Linux 上使用 Chrome 浏览器打开它。
您使用 SSH 克隆克隆了您的存储库。
git config --get remote.origin.url
git@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 无关紧要。
git@...
和 https://...
:git config --get remote.origin.url | sed -E 's/:([^\/])/\/\1/g' | sed -e 's/ssh\/\/\///g' | sed -e 's/git@/https:\/\//g'
打印任意命名的远程获取 URL:
git remote -v | grep fetch | awk '{print $2}'
如果您不知道某个分支的上游远程名称,您可以首先通过检查当前分支所基于的上游分支名称来查找它。像这样使用 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)
现在应该注意,这不一定与克隆的源远程存储库相同。然而,在许多情况下,这就足够了。
#!/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
要仅获取远程 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
很简单,只需在放置 .git 文件夹的位置使用此命令
git config --get remote.origin.url
如果您已连接到网络
git remote show origin
它将向您显示最初克隆本地 Git 存储库的 URL。
希望这有帮助
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
在你可以使用之后
git-repo
git-pr
git remote show origin
(可选地使用 -n 标志由@Casey 提供),或使用@Montaro 和@rodel 建议的git remote -v
。´~/.gitconfig
对所有git
存储库都是全局的,这里来自通常位于.git/config
中的本地配置(但是对于 git-submodules 答案有点困难)。请注意,strace git config --get remote.origin.url
是您的朋友。git remote show origin
不起作用。在这种情况下,请尝试git remote -v