fetch 與引用規格(refspec)—— Git 學習筆記 23
fetch 與引用規格(refspec)
本文想討論 fetch 命令的細節。
假設我們用命令新增了一個遠端版本庫:
$ git remote add origin https://github.com/schacon/simplegit-progit
上述命令會在 .git/config
檔案中新增幾行,並在其中指定遠端版本庫名稱(origin
)、URL 和一個用於獲取(fetch)操作的引用規格(refspec):
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/*:refs/remotes/origin/*
第1行:表示遠端倉庫的簡稱是 origin
;
第2行:指明遠端倉庫的 URL;
第3行:引用規格的格式由一個可選的 +
號和緊隨其後的 <src>:<dst>
組成。其中
<src>
是一個模式(pattern),代表遠端版本庫中的引用;<dst>
是遠端版本庫的引用在本地所對應的位置;- 開頭的
+
號告訴 Git 即使在不能快進的情況下也要(強制)更新引用。
預設情況下,引用規格由 git remote add
命令自動生成, Git 會獲取伺服器中 refs/heads/
下面的所有引用,並將它寫入到本地的 refs/remotes/origin/
中。
如果執行git fetch
命令,示意圖如下(命令中的灰色部分是預設引數):
所以,如果伺服器上有一個 master
分支,我們可以在本地通過下面這種方式來訪問該分支上的提交記錄:
$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/master
上面的三個命令作用相同,因為 Git 會把它們都擴充套件成 refs/remotes/origin/master
。
如果想讓 Git 每次只拉取遠端的 master
分支,而不是所有分支,可以把上文引用規格的第 3 行修改為:
fetch = +refs/heads/master:refs/remotes/origin/master
這也是針對遠端版本庫 origin
的 git fetch
操作的預設引用規格。
對於那些只執行一次的 fetch 操作,我們可以在命令列指定引用規格。 比如,只想將遠端的 master
分支抓取到本地的 origin/master
分支,可以執行:
$ git fetch origin master:refs/remotes/origin/master
也可以在命令列中按照如下的方式抓取多個分支:
$ git fetch origin master:refs/remotes/origin/master \
topic:refs/remotes/origin/topic
From git@github.com:schacon/simplegit
! [rejected] master -> origin/master (non fast forward)
* [new branch] topic -> origin/topic
在這個例子中,對 master
分支的抓取操作被拒絕,因為它不是一個可快進的引用。 可以在引用規格之前指定 +
號來強制抓取。例如:
$ git fetch origin +master:refs/remotes/origin/master \
topic:refs/remotes/origin/topic
上面的命令表示,對於遠端倉庫的 master 分支,會強制抓取到本地,但是對於 topic 分支僅允許快進式抓取。
你也可以在配置檔案中指定多個用於 fetch 操作的引用規格。 如果想在每次抓取時都包括 master
和 experiment
分支,可以這樣寫:
[remote "origin"]
url = https://github.com/schacon/simplegit-progit
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/experiment:refs/remotes/origin/experiment
參考資料
【1】 https://git-scm.com/book/zh/v2/
【2】《Git 高手之路》,人民郵電出版社
相關文章
- 遠端倉庫與 fetch 命令——Git 學習筆記 20Git筆記
- git學習筆記Git筆記
- Pro Git 學習筆記Git筆記
- git學習筆記 1Git筆記
- git學習筆記1Git筆記
- Git 分支的建立與切換 —— Git 學習筆記 14Git筆記
- Git 的安裝與初次使用 —— Git 學習筆記 03Git筆記
- 3月23日學習筆記筆記
- git入門學習筆記Git筆記
- Git極簡學習筆記Git筆記
- git rebase(變基)—— Git 學習筆記 19Git筆記
- Git 的特點—— Git 學習筆記 02Git筆記
- 取得 Git 倉庫 —— Git 學習筆記 04Git筆記
- python3學習筆記之 強引用和弱引用Python筆記
- C#學習筆記之值型別與引用型別C#筆記型別
- 20190228 學習筆記——廖雪峰 git筆記Git
- Git 簡單使用學習筆記Git筆記
- Git和Maven的學習筆記GitMaven筆記
- git checkout 命令詳解—— Git 學習筆記 16Git筆記
- git status 命令總結 —— Git 學習筆記 06Git筆記
- 學習筆記:FFT與拉格朗日插值筆記FFT
- 撤銷操作 —— Git 學習筆記 12Git筆記
- Myth 關於Git的學習筆記Git筆記
- git cherry-pick 詳解 —— Git 學習筆記 18Git筆記
- git reset 命令詳解(一)—— Git 學習筆記 07Git筆記
- git reset 命令詳解(二)—— Git 學習筆記 08Git筆記
- 廖雪峰Git學習筆記1-Git簡介Git筆記
- git checkout 和 git reset 的區別 —— Git 學習筆記 09Git筆記
- C++ 學習筆記(3):引用和指標C++筆記指標
- 演算法學習筆記(23):杜教篩演算法筆記
- 正規表示式學習筆記筆記
- 動態規劃學習筆記動態規劃筆記
- 分數規劃學習筆記筆記
- 忽略某些檔案 —— Git 學習筆記 05Git筆記
- GIT學習筆記——第一章Git筆記
- Laravel學習筆記七-建立部落格Laravel筆記
- git 學習筆錄Git
- Python學習筆記 - 正規表示式Python筆記