一、遠(yuǎn)程倉庫的連接
遠(yuǎn)程倉庫的連接弥姻,需要有 GitHub 賬號(hào)骂倘,請(qǐng)自行注冊(cè) GitHub 賬號(hào)。由于本地 Git 倉庫和 GitHub 倉庫之間的傳輸是通過 SSH 加密的赏僧,所以大猛,需要一點(diǎn)設(shè)置,創(chuàng)建秘鑰:
第1步:創(chuàng)建 SSH Key淀零。
先檢查本機(jī)用戶 home目錄下是否存在 .ssh 目錄挽绩,防止萬一兩人提前認(rèn)識(shí),我們不是瞎忙活了嗎驾中!桌面右擊唉堪,打開Git Bash,并運(yùn)行:
cd ~/.ssh
返回:bash: d:command ont found
這種簡(jiǎn)單的英語不用解釋了吧。沒有肩民,緊接著我們創(chuàng)建秘鑰唠亚。
在用戶主目錄下,一般是C:\Users\Administrator\.ssh
持痰,看看有沒有 .ssh 目錄灶搜,如果有,再看看這個(gè)目錄下有沒有 id_rsa 和 id_rsa.pub 這兩個(gè)文件,如果已經(jīng)有了割卖,可直接跳到下一步前酿。如果沒有,打開Shell(Windows下打開Git Bash)鹏溯,創(chuàng)建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把郵件地址換成你自己的郵件地址罢维,然后一路三次回車,使用默認(rèn)值即可丙挽,由于這個(gè) Key 也不是用于軍事目的肺孵,所以也無需設(shè)置密碼。
如果一切順利的話取试,可以在用戶主目錄里找到 .ssh 目錄悬槽,里面有** id_rsa 和 id_rsa.pub 兩個(gè)文件,這兩個(gè)就是 SSH Key 的秘鑰對(duì)瞬浓,id_rsa是私鑰初婆,不能泄露出去,id_rsa.pub **是公鑰猿棉,可以放心地告訴任何人磅叛。
第2步:登陸GitHub,打開settings
萨赁,SSH and GPG keys 頁面
然后弊琴,點(diǎn)“Add SSH Key”,填上任意Title杖爽,在Key文本框里粘貼 id_rsa.pub
文件的全部?jī)?nèi)容:
點(diǎn)“Add Key”敲董,你就應(yīng)該看到已經(jīng)添加的Key:
為什么 GitHub 需要 SSH Key 呢?因?yàn)?GitHub 需要識(shí)別出你推送的提交確實(shí)是你推送的慰安,而不是別人冒充的腋寨,而 Git 支持 SSH 協(xié)議,所以化焕,GitHub 只要知道了你的公鑰萄窜,就可以確認(rèn)只有你自己才能推送。
當(dāng)然撒桨,GitHub 允許你添加多個(gè) Key查刻。假定你有若干電腦,你一會(huì)兒在公司提交凤类,一會(huì)兒在家里提交穗泵,只要把每臺(tái)電腦的 Key 都添加到同一賬戶名下的 GitHub 賬號(hào)里面,就可以在每臺(tái)電腦上往GitHub推送了踱蠢。key 可以隨便生成火欧,但每個(gè)電腦只能用一個(gè)棋电。
最后友情提示,在 GitHub 上免費(fèi)托管的 Git 倉庫苇侵,任何人都可以看到喔(但只有你自己才能改)赶盔。所以,不要把敏感信息放進(jìn)去榆浓。
二于未、添加遠(yuǎn)程庫(空的庫連接git)
現(xiàn)在的情景是,你已經(jīng)在本地創(chuàng)建了一個(gè)Git倉庫后陡鹃,又想在GitHub創(chuàng)建一個(gè)Git倉庫烘浦,并且讓這兩個(gè)倉庫進(jìn)行遠(yuǎn)程同步,這樣萍鲸,GitHub上的倉庫既可以作為備份闷叉,又可以讓其他人通過該倉庫來協(xié)作,真是一舉多得脊阴。
首先握侧,登陸GitHub,然后嘿期,在右上角找到“new repository”按鈕品擎,創(chuàng)建一個(gè)新的倉庫
在 Repository name 填入 learngit,其他保持默認(rèn)設(shè)置备徐,點(diǎn)擊 “Create repository” 按鈕萄传,就成功地創(chuàng)建了一個(gè)新的 Git 倉庫:
目前,在GitHub上的這個(gè)learngit倉庫還是空的蜜猾,GitHub告訴我們秀菱,可以從這個(gè)倉庫克隆出新的倉庫,也可以把一個(gè)已有的本地倉庫與之關(guān)聯(lián)蹭睡,然后答朋,把本地倉庫的內(nèi)容推送到GitHub倉庫。
現(xiàn)在棠笑,我們根據(jù)GitHub的提示,在本地的learngit倉庫下運(yùn)行命令:
$ git remote add origin git@github.com:michaelliao/learngit.git
請(qǐng)千萬注意禽绪,把上面的michaelliao替換成你自己的GitHub賬戶名蓖救,否則,你在本地關(guān)聯(lián)的就是我的遠(yuǎn)程庫印屁,關(guān)聯(lián)沒有問題循捺,但是你以后推送是推不上去的,因?yàn)槟愕腟SH Key公鑰不在我的賬戶列表中雄人。
添加后从橘,遠(yuǎn)程庫的名字就是origin念赶,這是Git默認(rèn)的叫法,也可以改成別的恰力,但是origin這個(gè)名字一看就知道是遠(yuǎn)程庫叉谜。
下一步,就可以把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上:
$ 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)容推送到遠(yuǎn)程踩萎,用git push命令停局,由于遠(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)化命令锭碳。
推送成功后,可以立刻在GitHub頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣:
從現(xiàn)在起勿璃,只要本地作了提交擒抛,就可以通過命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,現(xiàn)在蝗柔,你就擁有了真正的分布式版本庫闻葵!
SSH警告:
我遇到的是在 git clone 地址的時(shí)候,使用的是 git 開頭的地址:
git clone git@github.com:condorheroblog/My-Second.git
出現(xiàn)警告的
$ git clone git@github.com:condorheroblog/My-Second.git
Cloning into 'My-Second'...
The authenticity of host 'github.com (13.229.188.59)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)?
正文:當(dāng)你第一次使用Git的
clone
或者push
命令連接GitHub時(shí)癣丧,會(huì)得到一個(gè)警告:
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會(huì)輸出一個(gè)警告,告訴你已經(jīng)把GitHub的Key添加到本機(jī)的一個(gè)信任列表里了:
Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
這個(gè)警告只會(huì)出現(xiàn)一次嬉橙,后面的操作就不會(huì)有任何警告了早直。
如果你實(shí)在擔(dān)心有人冒充GitHub服務(wù)器,輸入yes
前可以對(duì)照GitHub的RSA Key的指紋信息是否與SSH連接給出的一致市框。
小結(jié):
要關(guān)聯(lián)一個(gè)遠(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推送最新修改斧拍;
補(bǔ)充:git remote -v 查看遠(yuǎn)程庫信息
我們可以刪除已有的GitHub遠(yuǎn)程庫:git remote rm origin
三、從遠(yuǎn)程庫克抡刃 (clone是git連接已有庫的方法)
先前都是先有本地庫肆汹,后有遠(yuǎn)程庫的時(shí)候愚墓,如何關(guān)聯(lián)遠(yuǎn)程庫。現(xiàn)在昂勉,假設(shè)我們從零開發(fā)浪册,那么最好的方式是先創(chuàng)建遠(yuǎn)程庫,然后硼啤,從遠(yuǎn)程庫克隆议经。
首先,登陸GitHub谴返,創(chuàng)建一個(gè)新的倉庫煞肾,名字叫downloadgit
:
我們勾選Initialize this repository with a README
,這樣GitHub會(huì)自動(dòng)為我們創(chuàng)建一個(gè)README.md
文件嗓袱。創(chuàng)建完畢后籍救,可以看到README.md
文件:
現(xiàn)在,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了渠抹,下一步是用命令git clone
克隆一個(gè)本地庫:
$ git clone git@github.com:wangmingshun/downloadgit.git
Cloning into 'downloadgit'...
The authenticity of host 'github.com (192.30.252.122)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.252.122' (RSA) to the list of known hosts.
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done.
Checking connectivity... done.
注意把Git庫的地址換成你自己的蝙昙,然后進(jìn)入downloadgit
目錄看看,已經(jīng)有README.md
文件了梧却。
如果有多個(gè)人協(xié)作開發(fā)奇颠,那么每個(gè)人各自從遠(yuǎn)程克隆一份就可以了。
你也許還注意到放航,GitHub給出的地址不止一個(gè)烈拒,還可以用https://github.com/wangmingshun/downloadgit.git這樣的地址。實(shí)際上广鳍,Git支持多種協(xié)議荆几,默認(rèn)的git://
使用ssh,但也可以使用https
等其他協(xié)議赊时。
使用https
除了速度慢以外吨铸,還有個(gè)最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內(nèi)部就無法使用ssh
協(xié)議而只能用https
祖秒。
小結(jié)
要克隆一個(gè)倉庫诞吱,首先必須知道倉庫的地址,然后使用
git clone
命令克隆竭缝。Git支持多種協(xié)議狐胎,包括
https
,但通過ssh
支持的原生git
協(xié)議速度最快歌馍。