upstream - git remove remote




如何確定最初克隆本地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

你可以試試:

git remote -v

它將打印所有遙控器的提取/推送URL。


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

如果你沒有操縱它,我想你可以在.git/configremote["origin"]下找到它。


如果您不知道分支的上游遠程的名稱,則可以首先檢查構建當前分支的上游分支名稱。 像這樣使用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)

現在應該注意,這不一定與從中克隆的源遠程存儲庫相同。 但在許多情況下,這就足夠了。


如果您希望將其用於腳本編寫目的,則只能獲取URL

git config --get remote.origin.url

我主要使用:

git remote get-url origin

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


我永遠不會記住Git命令的所有參數,所以我只是在~/.gitconfig文件中添加了一個別名,這對我來說更有意義,所以我記得它,它導致更少的輸入:

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

重新加載終端后,您只需鍵入:

> git url

以下是我經常使用的一些內容:

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

為了補充其他答案:如果遙控器由於某種原因被更改,因此不能反映原始原點,則reflog中的第一個條目(即命令git reflog顯示的最後一個條目)應指示回購的位置最初克隆自。

例如

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

(請記住,可能會清除reflog,因此無法保證其正常工作。)


簡短回答:

$ 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 | grep -i fetch所有三個版本以僅顯示獲取URL。

如果您需要純粹的速度,那麼使用:

$ git config --get remote.origin.url

感謝@Jefromi指出這一點。


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