首先你要明白github連接過程是怎樣的大诸。
私有密鑰和公有密鑰是成對(duì)的兩個(gè)文件,私有文件保存在自己的本機(jī)辙芍,公有密鑰保存到另一端的服務(wù)器契吉,網(wǎng)站等菲语。
github就是一種網(wǎng)站佩憾。只有保存了私有密鑰的機(jī)器才能訪問遠(yuǎn)程的服務(wù)器等池凄。使用該鍵的好處是不用使用密碼,而是以密鑰的方式驗(yàn)證用戶。
https 和 SSH 的區(qū)別:
前者可以隨意克隆github上的項(xiàng)目,而不管是誰(shuí)的蕉饼;而后者則是你必須是你要克隆的項(xiàng)目的擁有者或管理員创肥,且需要先添加 SSH key ,否則無(wú)法克隆撒强。
https url 在push的時(shí)候是需要驗(yàn)證用戶名和密碼的芽隆;而 SSH 在push的時(shí)候,是不需要輸入用戶名的蕉毯,如果配置SSH key的時(shí)候設(shè)置了密碼棉磨,則需要輸入密碼的衙傀,否則直接是不需要輸入密碼的。
要想使本機(jī)能訪問github。有四個(gè)步驟:
- 創(chuàng)建私有密鑰和公有密鑰
- 將公有密鑰放到github里。
- 測(cè)試是否設(shè)置成功见秽。
- 修改本地git配置文件蔓肯,發(fā)布。
1. 創(chuàng)建私有密鑰和公有密鑰
1.1 首先判斷本機(jī)是否創(chuàng)建了公有密鑰:
$ ls ~/.ssh
這個(gè)命令用于檢查是否已經(jīng)存在 id_rsa.pub 或 id_dsa.pub 文件裆装,如果文件已經(jīng)存在桅滋,下面步驟可省略定庵,直接進(jìn)入步驟2俱病。
如果沒有類似 id_rsa和id_rsa.pub這樣的文件促王,則表明沒有創(chuàng)建。生成的辦法:
//配置git用戶名和郵箱:
$ git config user.name "用戶名"
$ git config user.email "郵箱"
$ ssh-keygen -t rsa -C "郵箱"
//多個(gè)密鑰的情況下缓熟,可生成ssh key同時(shí)指定保存的文件名
$ ssh-keygen -t rsa -f ~/.ssh/ellacf -C "郵箱"
代碼參數(shù)含義:
- -t 指定密鑰類型况毅,默認(rèn)是 rsa 尔许,可以省略毡们。
- -C 設(shè)置注釋文字登颓,比如郵箱。
- -f 指定密鑰文件存儲(chǔ)文件名放椰。
執(zhí)行后,會(huì)填寫保存兩種密鑰的文件夾,和passphrase,全部可以按enter刨晴。然后執(zhí)行l(wèi)s來(lái)查看生成后的文件屉来。
- id_rsa和id_rsa.pub分別是私有密鑰和公有密鑰。
- 我們指定的文件名就是id_rsa.github狈癞,這時(shí)~/.ssh目錄下會(huì)多出id_rsa.github和id_rsa.github.pub兩個(gè)文件茄靠,id_rsa.github里保存的就是我們要使用的key。
1.2 多個(gè)密鑰情況下蝶桶,可以:
- 新增并配置config文件慨绳。如果config文件不存在,先添加真竖;存在則直接修改
$ touch ~/.ssh/config
- 在config文件里添加如下內(nèi)容(User表示你的用戶名)
Host *.github.com
IdentityFile ~/.ssh/id_rsa.github
User 用戶名
2. 將公鑰添加到github上
2.1 首先你需要拷貝 id_rsa.pub 文件的內(nèi)容脐雪,你可以用編輯器打開文件復(fù)制,也可以用git命令復(fù)制該文件的內(nèi)容恢共,如:
$ pbcopy < ~/.ssh/ellacf.pub
添加到Github的ssh kesy設(shè)定里战秋。
1. 復(fù)制key到剪貼板
2. 登錄github
3. 點(diǎn)擊右上方的Accounting settings圖標(biāo)
4. 選擇 SSH key
5. 點(diǎn)擊 Add SSH key
3. 測(cè)試github是否連接成功
3.1 接下來(lái)進(jìn)行測(cè)試:
$ssh -T git@github.com
如果顯示:
Are you sure you want to continue connecting (yes/no)?
輸入yes。
然后就可以看到
Hi yourusername! You've successfully authenticated, but GitHub does not
provide shell access.
這樣就可以通過ssh方式clone Github上的工程并且進(jìn)行pull和push了讨韭。
3.2 總結(jié):
如果在步驟3的ssh命令后或者輸入yes后出現(xiàn)github Permission denied錯(cuò)誤脂信。執(zhí)行以下命令:
//start the ssh-agent in the background
$eval "$(ssh-agent -s)"
$ssh-add ~/.ssh/id_rsa
再執(zhí)行
$ssh -T git@github.com
4. 修改本地git配置文件,發(fā)布
4.1 修改本地配置文件透硝,.git文件夾下的config文件
修改前
[remote "origin"]
url = https://github.com/Ellacf/helloworld
fetch = +refs/heads/*:refs/remotes/origin/*
修改后
[remote "origin"]
url = git@github.com:Ellacf/helloworld.git
fetch = +refs/heads/*:refs/remotes/origin/*
發(fā)布
修改README.MD
$ git add . //更新README文件
$ git commit -m 'first commit'//提交更新吉嚣,并注釋信息“first commit”
$ git remote add origin git@github.com:Ellacf/helloworld.git //連接遠(yuǎn)程github項(xiàng)目
$ git push -u origin master //將本地項(xiàng)目更新到github項(xiàng)目上去
5. 關(guān)于可能出現(xiàn)的錯(cuò)誤
5.1 在執(zhí)行 $ git remote add origin git@github.com:Ellacf/helloworld.git
錯(cuò)誤提示:fatal: remote origin already exists.
解決辦法:
$ git remote rm origin //刪除遠(yuǎn)程路徑
然后在執(zhí)行:
$ git remote add origin git@github.com:Ellacf/helloworld.git //添加正確路徑
就不會(huì)報(bào)錯(cuò)誤了
5.2 在執(zhí)行 $ git push origin master
錯(cuò)誤提示:error:failed to push som refs to.......
解決辦法:
$ git pull origin master // 先把遠(yuǎn)程服務(wù)器github上面的文件拉下來(lái),再push 上去蹬铺。
5.3 執(zhí)行 git remote -v,即可看到遠(yuǎn)處資源庫(kù)路徑秉撇,如下所示:
origin git@github.com:Ellacf/helloworld.git (fetch)
origin git@github.com:Ellacf/helloworld.git (push)
5.4 隱私設(shè)置
當(dāng)公司全局設(shè)置git時(shí)甜攀,發(fā)布后會(huì)顯示公司配置的相應(yīng)用戶名和郵箱秋泄。此時(shí)需要針對(duì)每個(gè)項(xiàng)目,單獨(dú)設(shè)置用戶名和郵箱规阀,設(shè)置方法如下:
git clone https://github.com/Ellacf/helloworld.git // git檢出目錄
cd ~/helloworld
git init
git config user.name "用戶名"
git config user.email "郵箱"
git remote rm origin
git remote add origin git@github.com:Ellacf/helloworld.git
6.修改配置文件~/.ssh/config文件
6.1 在命令行輸入如下:
touch ~/.ssh/config
vim ~/.ssh/config
6.2 按住鍵盤i恒序,進(jìn)入文件編輯模式,寫入如下:
Host github.com
Hostname github.com
User Ellacf
Identityfile ~/.ssh/ellacf
6.3 輸入:wq谁撼,保存文件并退出即可歧胁。
參考我的配置在第一個(gè)留言。
以上更新于:2017-07-30