upstream - git添加远程仓库




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

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

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


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

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

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

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

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

例如

$ git reflog | tail -n 1
f34be46 [email protected]{0}: clone: from https://github.com/git/git
$

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


使用git remote show origin你必须在projects目录中。 但是,如果您想从其他任何地方确定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 2.7(2015年1月5日发布),您可以使用git remote获得更加一致的解决方案:

git remote get-url origin

git remote set-url origin <newurl>好吊坠)

Ben mathstufmathstuf )的 提交96f78d3 (2015年9月16日
(由Junio C gitster合并- gitster -提交e437cbd ,2015年10月5日)

remote:添加get-url子命令

扩展的insteadOfls-remote --url的一部分,也没有办法扩展pushInsteadOf
添加get-url子命令以便能够查询这两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]

如果只想要远程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: [email protected]:jaredpar/VsVim.git
  Push  URL: [email protected]:jaredpar/VsVim.git
  HEAD branch: master
  Remote branches:

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


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


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

(以下是针对官方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命令的所有参数,所以我只是在~/.gitconfig文件中添加了一个别名,这对我来说更有意义,所以我记得它,它导致更少的输入:

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

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

> git url

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

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

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

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

#!/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" == [email protected]* ]] \
 && { 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 [email protected]:your-username/your-repository.git
cd your-repository

git-remote-url origin

输出:

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




git-remote