Git —— 目前世界上最先進(jìn)的分布式版本控制系統(tǒng)官脓,高端大氣上檔次!
三、遠(yuǎn)程倉庫
Git是分布式版本控制系統(tǒng)揪惦,同一個(gè)Git倉庫,可以分布到不同的機(jī)器上罗侯。怎么分布呢器腋?最早,肯定只有一臺(tái)機(jī)器有一個(gè)原始版本庫钩杰,此后纫塌,別的機(jī)器可以“克隆”這個(gè)原始版本庫,而且每臺(tái)機(jī)器的版本庫其實(shí)都是一樣的讲弄,并沒有主次之分措左。
實(shí)際情況往往是這樣,找一臺(tái)電腦充當(dāng)服務(wù)器的角色避除,每天24小時(shí)開機(jī)怎披,其他每個(gè)人都從這個(gè)“服務(wù)器”倉庫克隆一份到自己的電腦上,并且各自把各自的提交推送到服務(wù)器倉庫里驹饺,也從服務(wù)器倉庫中拉取別人的提交钳枕。
Git的服務(wù)器可以自己搭建,不過現(xiàn)階段赏壹,為了學(xué)Git先搭個(gè)服務(wù)器絕對(duì)是小題大作鱼炒。好在這個(gè)世界上有個(gè)叫GitHub的神奇的網(wǎng)站,從名字就可以看出蝌借,這個(gè)網(wǎng)站就是提供Git倉庫托管服務(wù)的昔瞧,所以指蚁,只要注冊(cè)一個(gè)GitHub賬號(hào),就可以免費(fèi)獲得Git遠(yuǎn)程倉庫自晰。
接下來自行注冊(cè)GitHub賬號(hào)凝化。由于你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以你需要配置SSH keys酬荞,請(qǐng)參考上傳項(xiàng)目到GitHub詳細(xì)教程里的第三部分
為什么GitHub需要SSH Key呢搓劫?因?yàn)镚itHub需要識(shí)別出你推送的提交確實(shí)是你推送的,而不是別人冒充的混巧,而Git支持SSH協(xié)議枪向,所以,GitHub只要知道了你的公鑰咧党,就可以確認(rèn)只有你自己才能推送秘蛔。當(dāng)然,GitHub允許你添加多個(gè)Key傍衡。假定你有若干電腦深员,你一會(huì)兒在公司提交,一會(huì)兒在家里提交蛙埂,只要把每臺(tái)電腦的Key都添加到GitHub倦畅,就可以在每臺(tái)電腦上往GitHub推送了。
最后友情提示箱残,在GitHub上免費(fèi)托管的Git倉庫滔迈,任何人都可以看到喔(但只有你自己才能改)。所以被辑,不要把敏感信息放進(jìn)去。如果你不想讓別人看到Git庫敬惦,有兩個(gè)辦法盼理,一個(gè)是交點(diǎn)保護(hù)費(fèi),讓GitHub把公開的倉庫變成私有的俄删,這樣別人就看不見了(不可讀更不可寫)宏怔。另一個(gè)辦法是自己動(dòng)手,搭一個(gè)Git服務(wù)器畴椰,因?yàn)槭悄阕约旱腉it服務(wù)器臊诊,所以別人也是看不見的。
1斜脂、添加遠(yuǎn)程倉庫
現(xiàn)在抓艳,你已經(jīng)在本地創(chuàng)建了一個(gè)Git倉庫了(即GitTest
),又想在GitHub創(chuàng)建一個(gè)Git倉庫帚戳,并且讓這兩個(gè)倉庫進(jìn)行遠(yuǎn)程同步玷或,這樣儡首,GitHub上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協(xié)作
首先偏友,登錄GitHub創(chuàng)建一個(gè)新的倉庫蔬胯,創(chuàng)建時(shí)只填一個(gè)倉庫名GitTest
,其他不用管位他,直接點(diǎn)Create repository
按鈕
$ git remote add origin git@github.com:YoungerLi/GitTest.git
添加后迈勋,遠(yuǎn)程庫的名字就是origin
炬灭,這是Git默認(rèn)的叫法,也可以改成別的靡菇,但是origin
這個(gè)名字一看就知道是遠(yuǎn)程庫重归。下一步,就可以把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上
$ git push -u origin master
由于遠(yuǎn)程庫是空的厦凤,我們第一次推送master
分支時(shí)鼻吮,加上了-u
參數(shù),Git不但會(huì)把本地的master
分支內(nèi)容推送的遠(yuǎn)程新的master
分支较鼓,還會(huì)把本地的master
分支和遠(yuǎn)程的master
分支關(guān)聯(lián)起來椎木,在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令。
2博烂、查看遠(yuǎn)程倉庫
如果想查看你已經(jīng)配置的遠(yuǎn)程倉庫服務(wù)器香椎,可以運(yùn)行 $ git remote
命令,它會(huì)列出每一個(gè)遠(yuǎn)程服務(wù)器的簡(jiǎn)寫禽篱,剛才我們已經(jīng)關(guān)聯(lián)了一個(gè)遠(yuǎn)程倉庫了畜伐,名字是origin
,所以現(xiàn)在執(zhí)行$ git remote
$ git remote
origin
koke
可以看到輸出一個(gè)origin
躺率,這說明現(xiàn)在只有一個(gè)名字為origin
的遠(yuǎn)程倉庫玛界,你還可以添加多個(gè)。
如果你想看到更多信息悼吱,可以使用-v
選項(xiàng)慎框,這樣就會(huì)每個(gè)輸出倉庫對(duì)應(yīng)的URL
$ git remote -v
origin git@github.com:YoungerLi/GitTest.git (fetch)
origin git@github.com:YoungerLi/GitTest.git (push)
koke git://github.com/koke/GitTest.git (fetch)
koke git://github.com/koke/GitTest.git (push)
3、從遠(yuǎn)程倉庫拉取數(shù)據(jù)
$ git fetch origin
這個(gè)命令會(huì)訪問遠(yuǎn)程倉庫后添,從中拉取所有你還沒有的數(shù)據(jù)笨枯。 執(zhí)行完成后,你將會(huì)擁有那個(gè)遠(yuǎn)程倉庫中所有分支的引用,可以隨時(shí)合并或查看猎醇。
必須注意 $ git fetch
命令會(huì)將數(shù)據(jù)拉取到你的本地倉庫 - 它并不會(huì)自動(dòng)合并或修改你當(dāng)前的工作窥突。 當(dāng)準(zhǔn)備好時(shí)你必須手動(dòng)將其合并入你的工作。
4硫嘶、拉取數(shù)據(jù)并合并
$ git pull
5阻问、推送數(shù)據(jù)到遠(yuǎn)程倉庫
$ git push origin master
當(dāng)你想分享你的項(xiàng)目時(shí),必須將其推送到上游沦疾。 這個(gè)命令很簡(jiǎn)單:git push [remote-name] [branch-name]
称近。 當(dāng)你想要將 master
分支推送到 origin
服務(wù)器時(shí)(克隆時(shí)會(huì)自動(dòng)幫你設(shè)置好這兩個(gè)名字),那么運(yùn)行這個(gè)命令就可以將你所做的上傳到服務(wù)器哮塞。
如果服務(wù)器有新的數(shù)據(jù)(別人上傳的)你還沒拉取下來刨秆,這個(gè)命令會(huì)被拒絕,你必須先拉取新的數(shù)據(jù)下來之后再上傳你的(相當(dāng)于SVN中先更新后提交)
6忆畅、遠(yuǎn)程倉庫的重命名
如果想要重命名引用的名字可以運(yùn)行 $ git remote rename
去修改一個(gè)遠(yuǎn)程倉庫的簡(jiǎn)寫名衡未。 例如,想要將 koke
重命名為 kk
家凯,可以這樣做
$ git remote rename koke kk
$ git remote
origin
kk
7缓醋、遠(yuǎn)程倉庫的移除
如果因?yàn)橐恍┰蛳胍瞥粋€(gè)遠(yuǎn)程倉庫,你已經(jīng)從服務(wù)器上搬走了或不再想使用某一個(gè)特定的鏡像了绊诲,又或者某一個(gè)貢獻(xiàn)者不再貢獻(xiàn)了送粱,可以使用 $ git remote rm
$ git remote rm kk
$ git remote
origin
8、從遠(yuǎn)程倉庫克隆
以上講的都是先創(chuàng)建一個(gè)本地Git倉庫,再在GitHub上創(chuàng)建遠(yuǎn)程倉庫,然后再關(guān)聯(lián)兩者盏混。假如我們回到最初,先創(chuàng)建一個(gè)遠(yuǎn)程倉庫动雹,然后再從遠(yuǎn)程倉庫克隆到本地。
首先跟压,在GitHub上創(chuàng)建一個(gè)倉庫
克隆命令是
$ git clone URL
,URL的獲取見上圖丐怯,執(zhí)行克隆命令之前請(qǐng)將終端的目錄cd到你喜歡的目錄下
$ git clone git@github.com:YoungerLi/gitAnother.git
執(zhí)行完畢喷好,你就可以看到在你喜歡的目錄下多出了一個(gè)文件夾,文件夾內(nèi)包含一個(gè)README.md文件读跷,這就是本地倉庫了梗搅。
如果有多個(gè)人協(xié)作開發(fā),那么每個(gè)人各自從遠(yuǎn)程克隆一份就可以了。