W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
這本書讀到這里,你已經(jīng)使用過一些簡單的遠(yuǎn)程分支到本地引用的映射方式了,這種映射可以更為復(fù)雜。 假設(shè)你像這樣添加了一項(xiàng)遠(yuǎn)程倉庫:
$ git remote add origin git@github.com:schacon/simplegit-progit.git
它在你的 .git/config 文件中添加了一節(jié),指定了遠(yuǎn)程的名稱 (origin), 遠(yuǎn)程倉庫的URL地址,和用于獲取操作的 Refspec:
[remote "origin"]
url = git@github.com:schacon/simplegit-progit.git
fetch = +refs/heads/*:refs/remotes/origin/*
Refspec 的格式是一個(gè)可選的 + 號,接著是 : 的格式,這里 是遠(yuǎn)端上的引用格式, 是將要記錄在本地的引用格式。可選的 + 號告訴 Git 在即使不能快速演進(jìn)的情況下,也去強(qiáng)制更新它。
缺省情況下 refspec 會被 git remote add 命令所自動(dòng)生成, Git 會獲取遠(yuǎn)端上 refs/heads/ 下面的所有引用,并將它寫入到本地的 refs/remotes/origin/. 所以,如果遠(yuǎn)端上有一個(gè) master 分支,你在本地可以通過下面這種方式來訪問它的歷史記錄:
$ git log origin/master
$ git log remotes/origin/master
$ git log refs/remotes/origin/master
它們?nèi)堑葍r(jià)的,因?yàn)?Git 把它們都擴(kuò)展成 refs/remotes/origin/master.
如果你想讓 Git 每次只拉取遠(yuǎn)程的 master 分支,而不是遠(yuǎn)程的所有分支,你可以把 fetch 這一行修改成這樣:
fetch = +refs/heads/master:refs/remotes/origin/master
這是 git fetch 操作對這個(gè)遠(yuǎn)端的缺省 refspec 值。而如果你只想做一次該操作,也可以在命令行上指定這個(gè) refspec. 如可以這樣拉取遠(yuǎn)程的 master 分支到本地的 origin/mymaster 分支:
$ git fetch origin master:refs/remotes/origin/mymaster
你也可以在命令行上指定多個(gè) refspec. 像這樣可以一次獲取遠(yuǎn)程的多個(gè)分支:
$ 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
在這個(gè)例子中, master 分支因?yàn)椴皇且粋€(gè)可以快速演進(jìn)的引用而拉取操作被拒絕。你可以在 refspec 之前使用一個(gè) + 號來重載這種行為。
你也可以在配置文件中指定多個(gè) refspec. 如你想在每次獲取時(shí)都獲取 master 和 experiment 分支,就添加兩行:
[remote "origin"]
url = git@github.com:schacon/simplegit-progit.git
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/experiment:refs/remotes/origin/experiment
但是這里不能使用部分通配符,像這樣就是不合法的:
fetch = +refs/heads/qa*:refs/remotes/origin/qa*
但無論如何,你可以使用命名空間來達(dá)到這個(gè)目的。如你有一個(gè)QA組,他們推送一系列分支,你想每次獲取 master 分支和QA組的所有分支,你可以使用這樣的配置段落:
[remote "origin"]
url = git@github.com:schacon/simplegit-progit.git
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/qa/*:refs/remotes/origin/qa/*
如果你的工作流很復(fù)雜,有QA組推送的分支、開發(fā)人員推送的分支、和集成人員推送的分支,并且他們在遠(yuǎn)程分支上協(xié)作,你可以采用這種方式為他們創(chuàng)建各自的命名空間。
采用命名空間的方式確實(shí)很棒,但QA組成員第1次是如何將他們的分支推送到 qa/ 空間里面的呢?答案是你可以使用 refspec 來推送。
如果QA組成員想把他們的 master 分支推送到遠(yuǎn)程的 qa/master 分支上,可以這樣運(yùn)行:
$ git push origin master:refs/heads/qa/master
如果他們想讓 Git 每次運(yùn)行 git push origin 時(shí)都這樣自動(dòng)推送,他們可以在配置文件中添加 push 值:
[remote "origin"]
url = git@github.com:schacon/simplegit-progit.git
fetch = +refs/heads/*:refs/remotes/origin/*
push = refs/heads/master:refs/heads/qa/master
這樣,就會讓 git push origin 缺省就把本地的 master 分支推送到遠(yuǎn)程的 qa/master 分支上。
你也可以使用 refspec 來刪除遠(yuǎn)程的引用,是通過運(yùn)行這樣的命令:
$ git push origin :topic
因?yàn)?code>refspec 的格式是 :, 通過把<src>
部分留空的方式,這個(gè)意思是是把遠(yuǎn)程的 topic 分支變成空,也就是刪除它。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: