Git复习(二)之远程仓库、注册GitHub账号、SSH警告、使用GitHub
遠(yuǎn)程倉庫
Git是分布式版本控制系統(tǒng),同一個Git倉庫,可以分布到不同的機(jī)器上。怎么分布呢?最早,肯定只有一臺機(jī)器有一個原始版本庫,此后,別的機(jī)器可以“克隆”這個原始版本庫,而且每臺機(jī)器的版本庫其實都是一樣的,并沒有主次之分。?
你肯定會想,至少需要兩臺機(jī)器才能玩遠(yuǎn)程庫不是?但是我只有一臺電腦,怎么玩?實際情況往往是這樣,找一臺電腦充當(dāng)服務(wù)器的角色,每天24小時開機(jī),其他每個人都從這個“服務(wù)器”倉庫克隆一份到自己的電腦上,并且各自把各自
的提交推送到服務(wù)器倉庫里,也從服務(wù)器倉庫中拉取別人的提交。
完全可以自己搭建一臺運(yùn)行Git的服務(wù)器,為了學(xué)Git先搭個服務(wù)器絕對是小題大作。好在這個世界上有個叫GitHub的神奇的網(wǎng)站,從名字就可以看出,這個網(wǎng)站就是提供Git倉庫托管服務(wù)的,所以,只要注冊一個GitHub賬
號,就可以免費(fèi)獲得Git遠(yuǎn)程倉庫。
注冊GitHub賬號
第1步:創(chuàng)建SSH Key,這是因為本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經(jīng)有了,可直接跳到下一
步。如果沒有,打開Shell,創(chuàng)建SSH Key?
ssh-keygen -t rsa -C "xxx"??xxx是我們的郵箱地址,然后一路回車,使用默認(rèn)值即可,由于這個Key也不是用于軍事目的,所以也無需設(shè)置密碼。如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_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)容:點“Add Key”,你就應(yīng)該看到已經(jīng)添加的Key:??
??為什么GitHub需要SSH Key呢?因為GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協(xié)議,所以,GitHub只要知道了你的公鑰,就可以確認(rèn)只有你自己才能推送。當(dāng)然,GitHub允許你添加多個
Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家里提交,只要把每臺電腦的Key都添加到GitHub,就可以在每臺電腦上往GitHub推送了。在GitHub上免費(fèi)托管的Git倉庫,任何人都可以看到,但是沒辦法更改,如果我們不想讓
別人看見我們的git倉庫有兩個辦法:方案一:花錢將公開的倉庫變?yōu)樗接械?#xff0c;方案二:自己搭一個git服務(wù)器,因為是自己的git服務(wù)器,所以別人是看不見的,是公司開發(fā)必備。
添加遠(yuǎn)程倉庫
假設(shè)我們在本地創(chuàng)建了一個Git倉庫后,又想在GitHub創(chuàng)建一個Git倉庫,并且讓這兩個倉庫進(jìn)行遠(yuǎn)程同步。
首先,登陸GitHub,然后,在右上角找到“Create a new repo”按鈕,創(chuàng)建一個新的倉庫:
?
在Repository name填入learngit,其他保持默認(rèn)設(shè)置,點擊“Create repository”按鈕,就成功地創(chuàng)建了一個新的Git倉庫:
?
關(guān)聯(lián)遠(yuǎn)程倉庫和本地倉庫
目前,在GitHub上的這個learngit倉庫還是空的,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關(guān)聯(lián),然后,把本地倉庫的內(nèi)容推送到GitHub倉庫。
現(xiàn)在,我們根據(jù)GitHub的提示,在本地的learngit倉庫下運(yùn)行命令:
$ git remote add origin git@github.com:xxx/learngit.gitgit@github.com:xxx/learngit.git是選擇SSH的倉庫地址,“xxx”自己的GitHub賬戶名,origin是遠(yuǎn)程倉庫的名字,是Git默認(rèn)的叫法,也可以改成別的。
git remote add 遠(yuǎn)程倉庫名字 遠(yuǎn)程倉庫地址
下一步,就可以把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上:
$ git push -u origin master * [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'origin'.git push -u origin 分支名字
??把本地庫的內(nèi)容推送到遠(yuǎn)程,用git push命令,實際上是把當(dāng)前分支master推送到遠(yuǎn)程。由于遠(yuǎn)程庫是空的,我們第一次推送master分支時,加上了-u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會
把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時就可以簡化命令。
推送成功后,可以立刻在GitHub頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣:
從現(xiàn)在起,只要本地作了提交,就可以通過命令:
$ git push origin master從遠(yuǎn)程庫克隆
我們從零開發(fā),那么最好的方式是先創(chuàng)建遠(yuǎn)程庫,然后,從遠(yuǎn)程庫克隆。
1、首先,登陸GitHub,創(chuàng)建一個新的倉庫,名字叫g(shù)itskills
2、我們勾選Initialize this repository with a README,這樣GitHub會自動為我們創(chuàng)建一個README.md文件。創(chuàng)建完畢后,可以看到README.md文件
3、下一步是用命令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), pack-reused 3 Receiving objects: 100% (3/3), done.??要將git地址換成自己的,如果有多個人協(xié)作開發(fā),那么每個人各自從遠(yuǎn)程克隆一份就可以了。
SSH警告
當(dāng)你第一次使用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時,需要你確認(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)一次,后面的操作就不會有任何警告了。
如果你實在擔(dān)心有人冒充GitHub服務(wù)器,輸入yes前可以對照GitHub的RSA Key的指紋信息是否與SSH連接給出的一致。
總結(jié):本地git倉庫和Github倉庫互相驗證對方,Github倉庫通過SSH Key來確認(rèn)信息是否是我們推送的,git倉庫驗證GitHub的Key的指紋信息是否真的來自GitHub的服務(wù)器。?
使用GitHub
我們一直用GitHub作為免費(fèi)的遠(yuǎn)程倉庫,如果是個人的開源項目,放到GitHub上是完全沒有問題的。其實GitHub還是一個開源協(xié)作社區(qū),通過GitHub,既可以讓別人參與你的開源項目,也可以參與
別人的開源項目。
在GitHub出現(xiàn)以前,開源項目開源容易,但讓廣大人民群眾參與進(jìn)來比較困難,因為要參與,就要提交代碼,而給每個想提交代碼的群眾都開一個賬號那是不現(xiàn)實的,因此,群眾也僅限于報個bug,
即使能改掉bug,也只能把diff文件用郵件發(fā)過去,很不方便。
但是在GitHub上,利用Git極其強(qiáng)大的克隆和分支功能,廣大人民群眾真正可以第一次自由參與各種開源項目了。
如何參與一個開源項目呢?比如人氣極高的bootstrap項目,這是一個非常強(qiáng)大的CSS框架,你可以訪問它的項目主頁https://github.com/twbs/bootstrap,點“Fork”就在自己的賬號下克隆了一個bootstrap
倉庫,然后,從自己的賬號下clone:
git clone git@github.com:michaelliao/bootstrap.git一定要從自己的賬號下clone倉庫,這樣你才能推送修改。如果從bootstrap的作者的倉庫地址git@github.com:twbs/bootstrap.git克隆,因為沒有權(quán)限,你將不能推送修改。
Bootstrap的官方倉庫twbs/bootstrap、你在GitHub上克隆的倉庫my/bootstrap,以及你自己克隆到本地電腦的倉庫,他們的關(guān)系就像下圖顯示的那樣:
┌─ GitHub ────────────────────────────────────┐ │ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ twbs/bootstrap │────>│ my/bootstrap │ │ │ └─────────────────┘ └─────────────────┘ │ │ ▲ │ └──────────────────────────────────┼──────────┘▼┌─────────────────┐│ local/bootstrap │└─────────────────┘如果你想修復(fù)bootstrap的一個bug,或者新增一個功能,立刻就可以開始干活,干完后,往自己的倉庫推送。
如果你希望bootstrap的官方庫能接受你的修改,你就可以在GitHub上發(fā)起一個pull request。當(dāng)然,對方是否接受你的pull request就不一定了。
總結(jié):
-
在GitHub上,可以任意Fork開源倉庫;
-
自己擁有Fork后的倉庫的讀寫權(quán)限;
-
可以推送pull request給官方倉庫來貢獻(xiàn)代碼。
?
轉(zhuǎn)載于:https://www.cnblogs.com/kunmomo/p/11359484.html
總結(jié)
以上是生活随笔為你收集整理的Git复习(二)之远程仓库、注册GitHub账号、SSH警告、使用GitHub的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git复习(一)之简介、安装、集中式和分
- 下一篇: Git复习(三)之分支管理、分支策略