git與github

第4節(jié):git與github

遠程倉庫

Git是分布式版本控制系統(tǒng)殿如,同一個Git倉庫,可以分布到不同的機器上涉馁。怎么分布呢?最早寒随,肯定只有一臺機器有一個原始版本庫,此后妻往,別的機器可以“克隆”這個原始版本庫互艾,而且每臺機器的版本庫其實都是一樣的讯泣,并沒有主次之分。

有個叫GitHub這個網(wǎng)站就是提供Git倉庫托管服務(wù)的好渠,所以,只要注冊一個GitHub賬號拳锚,就可以免費獲得Git遠程倉庫。

你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的匾荆,所以,需要一點設(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"

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

如果一切順利的話滋将,可以在用戶主目錄里找到.ssh目錄邻悬,里面有id_rsaid_rsa.pub兩個文件随闽,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰橱脸,不能泄露出去,id_rsa.pub是公鑰添诉,可以放心地告訴任何人。

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

然后竖瘾,點“Add SSH Key”,填上任意Title捕传,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容:

ssh

點“Add Key”扩劝,你就應(yīng)該看到已經(jīng)添加的Key:

為什么GitHub需要SSH Key呢庸论?因為GitHub需要識別出你推送的提交確實是你推送的棒呛,而不是別人冒充的,而Git支持SSH協(xié)議簇秒,所以,GitHub只要知道了你的公鑰扛禽,就可以確認只有你自己才能推送。

當然旋圆,GitHub允許你添加多個Key。假定你有若干電腦灵巧,你一會兒在公司提交搀矫,一會兒在家里提交,只要把每臺電腦的Key都添加到GitHub瓤球,就可以在每臺電腦上往GitHub推送了。

最后友情提示卦羡,在GitHub上免費托管的Git倉庫麦到,任何人都可以看到喔(但只有你自己才能改)绿饵。所以瓶颠,不要把敏感信息放進去。

如果你不想讓別人看到Git庫粹淋,有兩個辦法,一個是讓GitHub把公開的倉庫變成私有的桃移,這樣別人就看不見了(不可讀更不可寫)。另一個辦法是自己動手借杰,搭一個Git服務(wù)器,因為是你自己的Git服務(wù)器纤虽,所以別人也是看不見的。

添加遠程庫

現(xiàn)在的情景是,你已經(jīng)在本地創(chuàng)建了一個Git倉庫后刷袍,又想在GitHub創(chuàng)建一個Git倉庫,并且讓這兩個倉庫進行遠程同步呻纹,這樣,GitHub上的倉庫既可以作為備份雷酪,又可以讓其他人通過該倉庫來協(xié)作,真是一舉多得蔗怠。

首先墩弯,登陸GitHub寞射,然后,在右上角找到“new repository”按鈕桥温,創(chuàng)建一個新的倉庫:

創(chuàng)建倉庫

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

創(chuàng)建倉庫

目前区端,在GitHub上的這個learngit倉庫還是空的履腋,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫遵湖,也可以把一個已有的本地倉庫與之關(guān)聯(lián),然后延旧,把本地倉庫的內(nèi)容推送到GitHub倉庫。

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

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

請千萬注意集畅,把上面的michaelliao替換成你自己的GitHub賬戶名,否則挺智,你在本地關(guān)聯(lián)的就是我的遠程庫,關(guān)聯(lián)沒有問題二鳄,但是你以后推送是推不上去的,因為你的SSH Key公鑰不在我的賬戶列表中订讼。

添加后,遠程庫的名字就是origin欺殿,這是Git默認的叫法,也可以改成別的祈餐,但是origin這個名字一看就知道是遠程庫。

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

$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

把本地庫的內(nèi)容推送到遠程,用git push命令蜒谤,實際上是把當前分支master推送到遠程。

由于遠程庫是空的资锰,我們第一次推送master分支時,加上了-u參數(shù)绷杜,Git不但會把本地的master分支內(nèi)容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關(guān)聯(lián)起來鞭盟,在以后的推送或者拉取時就可以簡化命令瑰剃。

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

本地上傳到遠程

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

$ git push origin master

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

SSH警告

當你第一次使用Git的clone或者push命令連接GitHub時,會得到一個警告:

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)?

這是因為Git使用SSH連接梯醒,而SSH連接在第一次驗證GitHub服務(wù)器的Key時腌紧,需要你確認GitHub的Key的指紋信息是否真的來自GitHub的服務(wù)器,輸入yes回車即可壁肋。

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

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

這個警告只會出現(xiàn)一次浸遗,后面的操作就不會有任何警告了。

如果你實在擔(dān)心有人冒充GitHub服務(wù)器跛锌,輸入yes前可以對照GitHub的RSA Key的指紋信息是否與SSH連接給出的一致。

從遠程庫克隆

上次我們講了先有本地庫髓帽,后有遠程庫的時候,如何關(guān)聯(lián)遠程庫衡查。

現(xiàn)在,假設(shè)我們已經(jīng)創(chuàng)建了遠程庫拌牲,然后,從遠程庫克隆塌忽。

克隆

現(xiàn)在阁吝,遠程庫已經(jīng)準備好了砚婆,下一步是用命令git clone克隆一個本地庫:

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

注意把Git庫的地址換成你自己的突勇,然后進入learngit目錄看看,已經(jīng)有上述的文件了:

$ cd learngit
$ ls
LICENSE.txt  readme.txt

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

你也許還注意到定躏,GitHub給出的地址不止一個,還可以用https://github.com/fuziwang/learngit.git這樣的地址垮抗。實際上,Git支持多種協(xié)議冒版,默認的git://使用ssh,但也可以使用https等其他協(xié)議辞嗡。

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末明郭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子达址,更是在濱河造成了極大的恐慌,老刑警劉巖沉唠,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苛败,死亡現(xiàn)場離奇詭異满葛,居然都是意外死亡罢屈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門锄贷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谊却,你說我怎么就攤上這事⊙妆妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵碴萧,是天一觀的道長末购。 經(jīng)常有香客問我破喻,道長盟榴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上顶籽,老公的妹妹穿的比我還像新娘。我一直安慰自己礼饱,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布匀伏。 她就那樣靜靜地躺著,像睡著了一般够颠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上履磨,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天庆尘,我揣著相機與錄音剃诅,去河邊找鬼驶忌。 笑死,一個胖子當著我的面吹牛付魔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播几苍,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼擦剑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惠勒,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涂臣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赁遗,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年岩四,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剖煌。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖桶唐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尤泽,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布安吁,位于F島的核電站,受9級特大地震影響鬼店,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妇智,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一氏身、第九天 我趴在偏房一處隱蔽的房頂上張望巍棱。 院中可真熱鬧蛋欣,春花似錦、人聲如沸陷虎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至凿掂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背踪少。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留援奢,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像锉罐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子脓规,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

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