git教程之遠(yuǎn)程倉庫

image.png

本系列教程來自廖雪峰的官方網(wǎng)站,現(xiàn)在搬運(yùn)過來,目的幫助自己和小白學(xué)習(xí)收藏!
附贈:常用git命令清單

到目前為止锌订,我們已經(jīng)掌握了如何在Git倉庫里對一個文件進(jìn)行時(shí)光穿梭投队,你再也不用擔(dān)心文件備份或者丟失的問題了。
可是有用過集中式版本控制系統(tǒng)SVN的童鞋會站出來說幌氮,這些功能在SVN里早就有了吉拳,沒看出Git有什么特別的地方。
沒錯朴肺,如果只是在一個倉庫里管理文件歷史,Git和SVN真沒啥區(qū)別坚洽。為了保證你現(xiàn)在所學(xué)的Git物超所值宇挫,將來絕對不會后悔,同時(shí)為了打擊已經(jīng)不幸學(xué)了SVN的童鞋酪术,本章開始介紹Git的殺手級功能之一(注意是之一器瘪,也就是后面還有之二翠储,之三……):遠(yuǎn)程倉庫。
Git是分布式版本控制系統(tǒng)橡疼,同一個Git倉庫援所,可以分布到不同的機(jī)器上。怎么分布呢欣除?最早住拭,肯定只有一臺機(jī)器有一個原始版本庫,此后历帚,別的機(jī)器可以“克隆”這個原始版本庫滔岳,而且每臺機(jī)器的版本庫其實(shí)都是一樣的,并沒有主次之分挽牢。
你肯定會想谱煤,至少需要兩臺機(jī)器才能玩遠(yuǎn)程庫不是?但是我只有一臺電腦禽拔,怎么玩刘离?
其實(shí)一臺電腦上也是可以克隆多個版本庫的,只要不在同一個目錄下睹栖。不過硫惕,現(xiàn)實(shí)生活中是不會有人這么傻的在一臺電腦上搞幾個遠(yuǎn)程庫玩,因?yàn)橐慌_電腦上搞幾個遠(yuǎn)程庫完全沒有意義野来,而且硬盤掛了會導(dǎo)致所有庫都掛掉恼除,所以我也不告訴你在一臺電腦上怎么克隆多個倉庫。
實(shí)際情況往往是這樣曼氛,找一臺電腦充當(dāng)服務(wù)器的角色豁辉,每天24小時(shí)開機(jī),其他每個人都從這個“服務(wù)器”倉庫克隆一份到自己的電腦上搪锣,并且各自把各自的提交推送到服務(wù)器倉庫里,也從服務(wù)器倉庫中拉取別人的提交彩掐。
完全可以自己搭建一臺運(yùn)行Git的服務(wù)器构舟,不過現(xiàn)階段,為了學(xué)Git先搭個服務(wù)器絕對是小題大作堵幽。好在這個世界上有個叫GitHub的神奇的網(wǎng)站狗超,從名字就可以看出,這個網(wǎng)站就是提供Git倉庫托管服務(wù)的朴下,所以努咐,只要注冊一個GitHub賬號,就可以免費(fèi)獲得Git遠(yuǎn)程倉庫殴胧。
在繼續(xù)閱讀后續(xù)內(nèi)容前渗稍,請自行注冊GitHub賬號佩迟。由于你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以竿屹,需要一點(diǎn)設(shè)置:
第1步:創(chuàng)建SSH Key报强。在用戶主目錄下,看看有沒有.ssh目錄拱燃,如果有秉溉,再看看這個目錄下有沒有id_rsaid_rsa.pub這兩個文件,如果已經(jīng)有了碗誉,可直接跳到下一步召嘶。如果沒有,打開Shell(Windows下打開Git Bash)哮缺,創(chuàng)建SSH Key:

 $ ssh-keygen -t rsa -C "youremail@example.com"

你需要把郵件地址換成你自己的郵件地址弄跌,然后一路回車,使用默認(rèn)值即可蝴蜓,由于這個Key也不是用于軍事目的碟绑,所以也無需設(shè)置密碼。

如果一切順利的話茎匠,可以在用戶主目錄里找到.ssh目錄格仲,里面有id_rsaid_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對诵冒,id_rsa是私鑰凯肋,不能泄露出去,id_rsa.pub是公鑰汽馋,可以放心地告訴任何人侮东。

第2步:登陸GitHub,打開“Account settings”豹芯,“SSH Keys”頁面:

然后悄雅,點(diǎn)“Add SSH Key”,填上任意Title铁蹈,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容:

image.png

點(diǎn)“Add Key”宽闲,你就應(yīng)該看到已經(jīng)添加的Key:

image.png

為什么GitHub需要SSH Key呢?因?yàn)镚itHub需要識別出你推送的提交確實(shí)是你推送的握牧,而不是別人冒充的容诬,而Git支持SSH協(xié)議,所以沿腰,GitHub只要知道了你的公鑰览徒,就可以確認(rèn)只有你自己才能推送。

當(dāng)然颂龙,GitHub允許你添加多個Key习蓬。假定你有若干電腦纽什,你一會兒在公司提交,一會兒在家里提交友雳,只要把每臺電腦的Key都添加到GitHub稿湿,就可以在每臺電腦上往GitHub推送了。

最后友情提示押赊,在GitHub上免費(fèi)托管的Git倉庫饺藤,任何人都可以看到喔(但只有你自己才能改)。所以流礁,不要把敏感信息放進(jìn)去涕俗。

如果你不想讓別人看到Git庫,有兩個辦法神帅,一個是交點(diǎn)保護(hù)費(fèi)再姑,讓GitHub把公開的倉庫變成私有的,這樣別人就看不見了(不可讀更不可寫)找御。另一個辦法是自己動手元镀,搭一個Git服務(wù)器,因?yàn)槭悄阕约旱腉it服務(wù)器霎桅,所以別人也是看不見的栖疑。這個方法我們后面會講到的,相當(dāng)簡單滔驶,公司內(nèi)部開發(fā)必備遇革。

確保你擁有一個GitHub賬號后,我們就即將開始遠(yuǎn)程倉庫的學(xué)習(xí)揭糕。

添加遠(yuǎn)程庫

現(xiàn)在的情景是萝快,你已經(jīng)在本地創(chuàng)建了一個Git倉庫后,又想在GitHub創(chuàng)建一個Git倉庫著角,并且讓這兩個倉庫進(jìn)行遠(yuǎn)程同步揪漩,這樣,GitHub上的倉庫既可以作為備份吏口,又可以讓其他人通過該倉庫來協(xié)作奄容,真是一舉多得。

首先锨侯,登陸GitHub嫩海,然后冬殃,在右上角找到“Create a new repo”按鈕囚痴,創(chuàng)建一個新的倉庫:

image.png

在Repository name填入learngit,其他保持默認(rèn)設(shè)置审葬,點(diǎn)擊“Create repository”按鈕深滚,就成功地創(chuàng)建了一個新的Git倉庫:

image.png

目前奕谭,在GitHub上的這個learngit倉庫還是空的,GitHub告訴我們痴荐,可以從這個倉庫克隆出新的倉庫血柳,也可以把一個已有的本地倉庫與之關(guān)聯(lián),然后生兆,把本地倉庫的內(nèi)容推送到GitHub倉庫难捌。

現(xiàn)在,我們根據(jù)GitHub的提示鸦难,在本地的learngit倉庫下運(yùn)行命令:

$ git remote add origin git@github.com:michaelliao/learngit.git

請千萬注意根吁,把上面的michaelliao替換成你自己的GitHub賬戶名,否則合蔽,你在本地關(guān)聯(lián)的就是我的遠(yuǎn)程庫击敌,關(guān)聯(lián)沒有問題,但是你以后推送是推不上去的拴事,因?yàn)槟愕腟SH Key公鑰不在我的賬戶列表中沃斤。

添加后,遠(yuǎn)程庫的名字就是origin刃宵,這是Git默認(rèn)的叫法衡瓶,也可以改成別的,但是origin這個名字一看就知道是遠(yuǎn)程庫组去。

下一步鞍陨,就可以把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上:

$ git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

把本地庫的內(nèi)容推送到遠(yuǎn)程,用git push命令从隆,實(shí)際上是把當(dāng)前分支master推送到遠(yuǎn)程诚撵。

由于遠(yuǎn)程庫是空的,我們第一次推送master分支時(shí)键闺,加上了-u參數(shù)寿烟,Git不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來辛燥,在以后的推送或者拉取時(shí)就可以簡化命令筛武。

推送成功后,可以立刻在GitHub頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣:

image.png

從現(xiàn)在起挎塌,只要本地作了提交徘六,就可以通過命令:

$ git push origin master

把本地master分支的最新修改推送至GitHub,現(xiàn)在榴都,你就擁有了真正的分布式版本庫待锈!

SSH警告

當(dāng)你第一次使用Git的clone或者push命令連接GitHub時(shí),會得到一個警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

這是因?yàn)镚it使用SSH連接嘴高,而SSH連接在第一次驗(yàn)證GitHub服務(wù)器的Key時(shí)竿音,需要你確認(rèn)GitHub的Key的指紋信息是否真的來自GitHub的服務(wù)器和屎,輸入yes回車即可。

Git會輸出一個警告春瞬,告訴你已經(jīng)把GitHub的Key添加到本機(jī)的一個信任列表里了:

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.

這個警告只會出現(xiàn)一次柴信,后面的操作就不會有任何警告了。
如果你實(shí)在擔(dān)心有人冒充GitHub服務(wù)器宽气,輸入yes
前可以對照GitHub的RSA Key的指紋信息是否與SSH連接給出的一致随常。

小結(jié)

要關(guān)聯(lián)一個遠(yuǎn)程庫,使用命令git remote add origin git@server-name:path/repo-name.git萄涯;

關(guān)聯(lián)后线罕,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容;

此后窃判,每次本地提交后钞楼,只要有必要,就可以使用命令git push origin master推送最新修改袄琳;

分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠(yuǎn)程庫的存在询件,也就是有沒有聯(lián)網(wǎng)都可以正常工作,而SVN在沒有聯(lián)網(wǎng)的時(shí)候是拒絕干活的唆樊!當(dāng)有網(wǎng)絡(luò)的時(shí)候宛琅,再把本地提交推送一下就完成了同步,真是太方便了逗旁!

從遠(yuǎn)程庫克隆

上次我們講了先有本地庫嘿辟,后有遠(yuǎn)程庫的時(shí)候,如何關(guān)聯(lián)遠(yuǎn)程庫片效。

現(xiàn)在红伦,假設(shè)我們從零開發(fā),那么最好的方式是先創(chuàng)建遠(yuǎn)程庫淀衣,然后昙读,從遠(yuǎn)程庫克隆。

首先膨桥,登陸GitHub蛮浑,創(chuàng)建一個新的倉庫,名字叫g(shù)itskills:

image.png

我們勾選Initialize this repository with a README只嚣,這樣GitHub會自動為我們創(chuàng)建一個README.md文件沮稚。創(chuàng)建完畢后,可以看到README.md文件:

image.png

現(xiàn)在册舞,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了蕴掏,下一步是用命令git clone克隆一個本地庫:

$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ cd gitskills
$ ls
README.md

注意把Git庫的地址換成你自己的,然后進(jìn)入gitskills目錄看看,已經(jīng)有README.md文件了囚似。

視頻教程:http://github.liaoxuefeng.com/sinaweibopy/video/git-clone.mp4

如果有多個人協(xié)作開發(fā),那么每個人各自從遠(yuǎn)程克隆一份就可以了线得。

你也許還注意到饶唤,GitHub給出的地址不止一個,還可以用https://github.com/michaelliao/gitskills.git這樣的地址贯钩。實(shí)際上募狂,Git支持多種協(xié)議,默認(rèn)的git://使用ssh角雷,但也可以使用https等其他協(xié)議祸穷。

使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令勺三,但是在某些只開放http端口的公司內(nèi)部就無法使用ssh協(xié)議而只能用https雷滚。

小結(jié)

要克隆一個倉庫,首先必須知道倉庫的地址吗坚,然后使用git clone命令克隆祈远。

Git支持多種協(xié)議,包括https商源,但通過ssh支持的原生git協(xié)議速度最快车份。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市牡彻,隨后出現(xiàn)的幾起案子扫沼,更是在濱河造成了極大的恐慌,老刑警劉巖庄吼,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缎除,死亡現(xiàn)場離奇詭異,居然都是意外死亡总寻,警方通過查閱死者的電腦和手機(jī)伴找,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來废菱,“玉大人技矮,你說我怎么就攤上這事∈庵幔” “怎么了衰倦?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旁理。 經(jīng)常有香客問我樊零,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任驻襟,我火速辦了婚禮夺艰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沉衣。我一直安慰自己郁副,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布豌习。 她就那樣靜靜地躺著存谎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肥隆。 梳的紋絲不亂的頭發(fā)上既荚,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音栋艳,去河邊找鬼恰聘。 笑死,一個胖子當(dāng)著我的面吹牛吸占,可吹牛的內(nèi)容都是我干的憨琳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼旬昭,長吁一口氣:“原來是場噩夢啊……” “哼篙螟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起问拘,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤遍略,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后骤坐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绪杏,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年纽绍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蕾久。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拌夏,死狀恐怖僧著,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情障簿,我是刑警寧澤盹愚,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站站故,受9級特大地震影響皆怕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一愈腾、第九天 我趴在偏房一處隱蔽的房頂上張望憋活。 院中可真熱鬧,春花似錦虱黄、人聲如沸悦即。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赁豆,卻和暖如春仅醇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魔种。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工析二, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人节预。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓叶摄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親安拟。 傳聞我的和親對象是個殘疾皇子蛤吓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,644評論 9 163
  • 序 Do you know who he is? 今天一篇標(biāo)題為“年輕男子在高檔小區(qū)內(nèi)死亡,尸體幾日后才被發(fā)現(xiàn)”的...
    象_閱讀 188評論 0 0
  • 小時(shí)候經(jīng)常笑糠赦,好似生活充滿了可笑之事会傲。長大后,知道了所謂的沉穩(wěn)與睿智是要有深度的拙泽,而如何笑的有深度淌山,不好把握...
    孤獨(dú)與喧囂閱讀 220評論 1 0
  • 《小狗錢錢》不是我看到的第一本理財(cái)書籍,卻是我目前最喜歡的一本顾瞻。它以12歲小女孩吉雅的視角泼疑,描述了她和一條會說話的...
    一世阿維閱讀 180評論 0 0