2012-12-29 45 views
5

假設我從路徑/path/to/repo克隆了一個git倉庫。原始存儲庫將是一個稱爲「原點」的遠程。我可以使用命令git fetch origin從原點獲取對象。這將從遠程「起源」中檢索所有對象,包括所有制作的分支。Git:從指定遠程獲取和從URL獲取有什麼區別?

有什麼好奇的是,如果我使用命令git fetch /path/to/repo從同一個存儲庫中顯式獲取,我似乎檢索所有提交對象,但不是任何分支。

這是爲什麼?在這兩種情況下,我沒有做過完全一樣的事情嗎? Git的行爲如何不同?

+0

一個通常** **拉動從URL,而不是取* *來自URL。 –

回答

5

指定的遠程使用它們的配置在那裏建立一個refspec模式時,該遙控器是牽強:

[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = /path/to/repo 

所以,這兩種格式是等價的:

git fetch origin 
git fetch /path/to/repo +refs/heads/*:refs/remotes/origin/* 

基本上是:git fetch <path> <source>:<destination>。而且目的地在這裏很重要,因爲它是存儲遠程HEAD和分支指針的地方。

通過做git fetch /path/to/repo,你不設置任何refspec。因此,它僅提取提交,而不是對象,因爲git未被指示獲取並存儲它們。

這裏可能有一些細節或命名約定不正確,請隨時編輯。但全球思路應該是正確的

+0

注意:它沒有設置遠程跟蹤分支,但它確實設置了'FETCH_HEAD'。只是FYI。 –

2

的主要區別是,從一個URL獲取不存儲在遠程存儲庫分支到遠程跟蹤分支的狀態(例如refs/heads/mastermaster分公司在遠程originrefs/remotes/origin/master又名origin/master)但僅限於FETCH_HEAD

使用URL,而不是通過git remote add遠程設置在一次性用於拉動即:

$ git pull <URL> <branch or tag> 
相關問題