W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
縱觀全書,我們已經(jīng)使用過一些諸如遠(yuǎn)程分支到本地引用的簡單映射方式,但這種映射可以更復(fù)雜。 假設(shè)你添加了這樣一個遠(yuǎn)程版本庫:
$ git remote add origin https://github.com/schacon/simplegit-progit
上述命令會在你的?.git/config
?文件中添加一個小節(jié),并在其中指定遠(yuǎn)程版本庫的名稱(origin
)、URL 和一個用于獲取操作的引用規(guī)格(refspec):
[remote "origin"]
引用規(guī)格的格式由一個可選的?+
?號和緊隨其后的?<src>:<dst>
?組成,其中?<src>
?是一個模式(pattern),代表遠(yuǎn)程版本庫中的引用;<dst>
?是那些遠(yuǎn)程引用在本地所對應(yīng)的位置。?+
?號告訴 Git 即使在不能快進(jìn)的情況下也要(強制)更新引用。
默認(rèn)情況下,引用規(guī)格由?git remote add
?命令自動生成, Git 獲取服務(wù)器中?refs/heads/
下面的所有引用,并將它寫入到本地的?refs/remotes/origin/
?中。 所以,如果服務(wù)器上有一個?master
?分支,我們可以在本地通過下面這種方式來訪問該分支上的提交記錄:
$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/master
上面的三個命令作用相同,因為 Git 會把它們都擴展成?refs/remotes/origin/master
。
如果想讓 Git 每次只拉取遠(yuǎn)程的?master
?分支,而不是所有分支,可以把(引用規(guī)格的)獲取那一行修改為:
fetch = +refs/heads/master:refs/remotes/origin/master
這僅是針對該遠(yuǎn)程版本庫的?git fetch
?操作的默認(rèn)引用規(guī)格。 如果有某些只希望被執(zhí)行一次的操作,我們也可以在命令行指定引用規(guī)格。 若要將遠(yuǎn)程的?master
?分支拉到本地的origin/mymaster
?分支,可以運行:
$ git fetch origin master:refs/remotes/origin/mymaster
你也可以指定多個引用規(guī)格。 在命令行中,你可以按照如下的方式拉取多個分支:
$ git fetch origin master:refs/remotes/origin/mymaster \
topic:refs/remotes/origin/topic
From git@github.com:schacon/simplegit
! [rejected] master -> origin/mymaster (non fast forward)
* [new branch] topic -> origin/topic
在這個例子中,對?master
?分支的拉取操作被拒絕,因為它不是一個可以快進(jìn)的引用。 我們可以通過在引用規(guī)格之前指定?+
?號來覆蓋該規(guī)則。
你也可以在配置文件中指定多個用于獲取操作的引用規(guī)格。 如果想在每次獲取時都包括?master
?和experiment
?分支,添加如下兩行:
[remote "origin"]
我們不能在模式中使用部分通配符,所以像下面這樣的引用規(guī)格是不合法的:
fetch = +refs/heads/qa*:refs/remotes/origin/qa*
但我們可以使用命名空間(或目錄)來達(dá)到類似目的。 假設(shè)你有一個 QA 團(tuán)隊,他們推送了一系列分支,同時你只想要獲取?master
?和 QA 團(tuán)隊的所有分支而不關(guān)心其他任何分支,那么可以使用如下配置:
[remote "origin"]
如果項目的工作流很復(fù)雜,有 QA 團(tuán)隊推送分支、開發(fā)人員推送分支、集成團(tuán)隊推送并且在遠(yuǎn)程分支上展開協(xié)作,你就可以像這樣(在本地)為這些分支創(chuàng)建各自的命名空間,非常方便。
像上面這樣從遠(yuǎn)程版本庫獲取已在命名空間中的引用當(dāng)然很棒,但 QA 團(tuán)隊最初應(yīng)該如何將他們的分支放入遠(yuǎn)程的?qa/
?命名空間呢? 我們可以通過引用規(guī)格推送來完成這個任務(wù)。
如果 QA 團(tuán)隊想把他們的?master
?分支推送到遠(yuǎn)程服務(wù)器的?qa/master
?分支上,可以運行:
$ git push origin master:refs/heads/qa/master
如果他們希望 Git 每次運行?git push origin
?時都像上面這樣推送,可以在他們的配置文件中添加一條?push
?值:
[remote "origin"]
正如剛才所指出的,這會讓?git push origin
?默認(rèn)把本地?master
?分支推送到遠(yuǎn)程qa/master
?分支。
你還可以借助類似下面的命令通過引用規(guī)格從遠(yuǎn)程服務(wù)器上刪除引用:
$ git push origin :topic
因為引用規(guī)格(的格式)是?<src>:<dst>
,所以上述命令把?<src>
?留空,意味著把遠(yuǎn)程版本庫的?topic
?分支定義為空值,也就是刪除它。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: