備注:
本文參考于廖雪峰老師的博客Git教程。依照其博客進行學(xué)習(xí)和記錄,感謝其無私分享,也歡迎各位查看原文。
知識點
ssh-keygen -t rsa -C "youremail@example.com"生成SSh密鑰對。私鑰保存好,公鑰可以添加到Git服務(wù)器(如GitHub遠(yuǎn)程倉庫)添加或關(guān)聯(lián)一個遠(yuǎn)程倉庫,
git remote add origin git@server-name:path/repo-name.git第一次將本地倉庫推送到遠(yuǎn)程master分支,
git push -u origin master本地提交后,將本地最新倉庫推送到遠(yuǎn)程,
git push origin master克隆遠(yuǎn)程倉庫,
git clone git@server-name:path/repo-name.git
遠(yuǎn)程倉庫
Git是分布式版本控制系統(tǒng),同一個Git倉庫可以分布到不同機器上。一臺機器上的原始版本庫,可以被其他機器“克隆”,且每臺機器的版本庫都一樣,沒有主次之分。(一臺電腦不同目錄也可也組成遠(yuǎn)程倉庫)
實際,一般是有一臺服務(wù)器,每個人從這個服務(wù)器倉庫克隆一份到自己電腦,并且可以提交自己的代碼,或者從服務(wù)器倉庫拉取別人的提交。
Github就是一個提供遠(yuǎn)程倉庫托管服務(wù)的網(wǎng)站,通過github賬號,就可以免費獲得Git遠(yuǎn)程倉庫。
本地和遠(yuǎn)程倉庫
本地Git倉庫和遠(yuǎn)程Github倉庫之間的傳輸是通過SSH加密的
- 創(chuàng)建
SSH Key
創(chuàng)建SSH Key時,生成的公鑰和私鑰默認(rèn)存放在用戶主目錄下,在用戶主目錄下(windows為c/Users/用戶名/,linux為/home/用戶目錄/)會有一個.ssh目錄,并且里面包含有id_rsa和id_rsa.pub兩個文件。
- 打開終端(shell,windows下打開Git Bash),創(chuàng)建
SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
設(shè)置及密碼等,直接回車保持默認(rèn)即可,暫時不用對key設(shè)置密碼(除非保密級別特別高)
此時,在用戶主目錄下找到.ssh目錄,里面有id_rsa(私鑰,不能泄露)和id_rsa.pub(公鑰),這兩個就是SSH Key的秘密對。
github遠(yuǎn)程倉庫添加密鑰
登陸
Github,點擊頭像,選擇setting,打開SSH and GPG keys>SSH keys列表然后點擊“New SSH Key”,填上Title,在Key文本框里粘貼公鑰
id_rsa.pub的內(nèi)容

點“Add key”,將公鑰添加到Github
GitHub支持SSH協(xié)議,通過你添加的公鑰,就可以確定代碼的提交、遠(yuǎn)程連接、推送等不會被別人頂替
Github允許添加多個Key,這樣可以在多臺電腦上遠(yuǎn)程連接github倉庫、提交和推送代碼等。
Github上托管的Git倉庫,目前公開庫可以被所有人查看,如果設(shè)置為私有庫則只能自己查看修改
通過有條件,可以自己搭建Git服務(wù)器
添加遠(yuǎn)程倉庫
本地已經(jīng)存在一個Git倉庫,通過將其連接到遠(yuǎn)程GitHub倉庫,可以實現(xiàn)備份和遠(yuǎn)程同步(和寫作)
- 登陸GItHub,點擊“New repository”,新建一個倉庫。填上倉庫名、描述、public,點擊“create repository”。

- 現(xiàn)在一個空的GItHub倉庫已經(jīng)創(chuàng)建完成。
如下所示,GitHub快速安裝,有三個向?qū)崾荆梢栽诿钚袆?chuàng)建一個新倉庫、或者從本地推送一個已有的倉庫、或者導(dǎo)入代碼從一個倉庫

- 要把本地已有的倉庫推送到遠(yuǎn)程,根據(jù)GitHub提示,在本地的
GitTest倉庫目錄下運行如下命令
$ git remote add origin git@github.com:findmoon/newrepo.git
本地倉庫已經(jīng)和遠(yuǎn)程倉庫關(guān)聯(lián),實際上可以和任何遠(yuǎn)程倉庫關(guān)聯(lián),但是如果SSH Key公鑰不在GitHub的賬戶列表中,是無法推送的。
遠(yuǎn)程倉庫的名字是origin,是Git默認(rèn)的叫法。
- 把本地倉庫的內(nèi)容推送到遠(yuǎn)程倉庫
$ git push -u origin master
The authenticity of host 'github.com (...)' can't be established.
RSA key fingerprint is ...
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.255.112' (RSA) to the list of known hosts.
對象計數(shù)中: 10, 完成.
Delta compression using up to 4 threads.
壓縮對象中: 100% (7/7), 完成.
寫入對象中: 100% (10/10), 845 bytes | 0 bytes/s, 完成.
Total 10 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), done.
To git@github.com:findmoon/newrepo.git
* [new branch] master -> master
分支 master 設(shè)置為跟蹤來自 origin 的遠(yuǎn)程分支 master。
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)起來,在以后的推送或者拉取時就可以簡化命令
- 查看遠(yuǎn)程倉庫已經(jīng)和本地一樣

- 現(xiàn)在,只要本地倉庫提交后,就可以直接推送到遠(yuǎn)程
$ git push origin master
這樣,一個分布式版本庫就完成了。
SSH警告
在第一次連接GitHub(clone或push),會有一個SSH的警告
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)?
這是因為SSH連接在第一次驗證GitHub服務(wù)器的key時,需要你確認(rèn)GitHub的key的指紋信息是否真的來自GitHub服務(wù)器。
輸入yes后,主機(你)就會把GitHub的key添加到本機的信任列表里面。這個警告只會出現(xiàn)一次。
從GitHub遠(yuǎn)程倉庫克隆
開發(fā)時,可能會先創(chuàng)建遠(yuǎn)程庫,然后從遠(yuǎn)程庫克隆到本地
- 登陸GitHub,創(chuàng)建一個新倉庫
remoteRepo(可以勾選Initialize this repository with a README,初始化readme文件)

- 創(chuàng)建完成后,新倉庫包含readme文件

- 遠(yuǎn)程庫已經(jīng)創(chuàng)建完成,下一步可以用
git clone克隆到本地庫。在倉庫的中間右邊,有一個Clone or download按鈕,可以看到clone的地址
$ git clone git@github.com:findmoon/remoteRepo.git
正克隆到 'remoteRepo'...
Warning: Permanently added the RSA host key for IP address 'XXX' to the list of known hosts.
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
接收對象中: 100% (3/3), 完成.
檢查連接... 完成。
clone完成后,遠(yuǎn)程倉庫就被下載下來??梢赃M入目錄查看
- git clone克隆也支持https協(xié)議,但是https每次都需要輸入口令,且速度較慢