在OS環(huán)境下在VScode內(nèi)使用github基礎(chǔ)(一)本地倉(cāng)庫(kù)中已經(jīng)介紹了宙橱,如何在本地新建一個(gè)倉(cāng)庫(kù)踩窖。這里將繼續(xù)介紹一下自己將本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)建立連接的方式亩进。
新建的本地倉(cāng)庫(kù)與clone下來的本地倉(cāng)庫(kù)間還是有著比較大的區(qū)別的。由于從遠(yuǎn)程clone到本地的分支自動(dòng)建立關(guān)聯(lián)忘瓦,而本地與遠(yuǎn)程建立了pull的關(guān)系但無法push鼻听,強(qiáng)行push會(huì)出現(xiàn)upstream問題吱晒,建立連接的過程會(huì)比較繁瑣甸饱,在大部分情況下,直接在github內(nèi)建立倉(cāng)庫(kù)然后clone至本地會(huì)是更加簡(jiǎn)便的方法枕荞。
上篇文章中柜候,已經(jīng)完成了本地倉(cāng)庫(kù)的建立與commit操作,接下來要實(shí)現(xiàn)的就是將本地倉(cāng)庫(kù)push至遠(yuǎn)程倉(cāng)庫(kù)躏精。
1. 配置SSH
1.1 生成SSH
上傳github有兩種方式渣刷,使用配對(duì)的SSH密鑰或者賬號(hào)密碼方式,前者一次設(shè)定即可矗烛,后者應(yīng)該也有記憶功能辅柴,但在個(gè)人使用過程中出不來要求輸入密碼的界面,有兩次出現(xiàn)后輸入密碼后并不顯示瞭吃,光標(biāo)在原地不動(dòng)碌嘀,根據(jù)他人經(jīng)驗(yàn)貼,實(shí)際密碼已經(jīng)輸入進(jìn)去了歪架,只需要回車即可股冗。有興趣的讀者可以自己嘗試,若知道為何時(shí)而才出現(xiàn)輸入密碼命令和蚪,希望可以分享一下~這里密鑰的配置方法也是手冊(cè)的直接轉(zhuǎn)述止状。
密鑰一般默認(rèn)存儲(chǔ)在~/.ssh目錄下,生成密鑰前攒霹,可以首先檢查一下是否已經(jīng)生成過密鑰怯疤。使用 cd ~/.ssh 命令,若有密鑰將會(huì)出現(xiàn)以下內(nèi)容:
$ cd ~/.ssh
ls
authorized_keys2 id_dsa known_hosts
config id_dsa.pub
其中.pub文件為公鑰而另一個(gè)即對(duì)應(yīng)的私鑰催束。第一次設(shè)置本地倉(cāng)庫(kù)連接前應(yīng)當(dāng)是沒有密鑰的集峦,需要我們生成一對(duì)公鑰與私鑰。輸入ssh-keygen -t rsa -C "郵箱地址" 命令后,就可以看到以下文本了
$ ssh-keygen -t rsa -C "email@email.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/schacon/.ssh/id_rsa):
Created directory '/home/schacon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/schacon/.ssh/id_rsa.
Your public key has been saved in /home/schacon/.ssh/id_rsa.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local
其中后面的幾行是分開出現(xiàn)的塔淤,只需要我們按幾次enter鍵確認(rèn)即可摘昌。當(dāng)最后四行出現(xiàn)時(shí),我們的密鑰就生成完畢了高蜂,然后再使用 cat命令調(diào)用出.pub文件即公鑰的內(nèi)容第焰,并復(fù)制到github中就完成了SSH的配置。要復(fù)制的內(nèi)容是從第二行開始的所有文本妨马。
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3N...
...NrRFi9wrf+M7Q== schacon@mylaptop.local
1.2 在gihub中配置SSH
復(fù)制好公鑰后,登陸github帳戶杀赢,點(diǎn)擊頭像烘跺,依次點(diǎn)擊Settings -> 左邊欄 SSH and GPG keys -> New SSH key,會(huì)出現(xiàn)兩個(gè)內(nèi)容框tittle與key脂崔,在key中粘貼剛才復(fù)制的公鑰滤淳,tittle可以隨便輸入,建議設(shè)置為私鑰所在的設(shè)備砌左,如Steve's Macbook Air脖咐。
2. 初次上傳
cd 項(xiàng)目所在目錄 #首先cd至項(xiàng)目所在目錄
git init #初始化本地倉(cāng)庫(kù),若已初始化可以省略
git add README.md
git commit -m "first commit" #add并commit''README.md''文件至本地倉(cāng)庫(kù)中
git remote add origin git@github.com:XXXX/XXXX.git #初始化所要上傳的遠(yuǎn)程倉(cāng)庫(kù)
git push -u origin master #將本地倉(cāng)庫(kù)push至遠(yuǎn)程倉(cāng)庫(kù)
代碼中前四行為本地倉(cāng)庫(kù)操作不做贅述汇歹。剛開始操作時(shí)屁擅,只需復(fù)制黏貼所有內(nèi)容即可,若想要更好理解5产弹、6兩行的內(nèi)容派歌,后面是一些解釋說明。
首先痰哨,第5行''git remote add origin''后的內(nèi)容是倉(cāng)庫(kù)地址胶果,要獲取地址在倉(cāng)庫(kù)內(nèi)點(diǎn)擊clone -> Use SSH 就可以看到SSH方式上傳所用的倉(cāng)庫(kù)地址,直接復(fù)制即可斤斧。初始化遠(yuǎn)程倉(cāng)庫(kù)后早抠,所在的本地倉(cāng)庫(kù)在之后都會(huì)以此作為對(duì)應(yīng)的遠(yuǎn)程倉(cāng)庫(kù)。以后要是想知道這個(gè)倉(cāng)庫(kù)對(duì)應(yīng)遠(yuǎn)程倉(cāng)庫(kù)信息撬讽,使用git remote -v命令即可蕊连。
git remote -v #查看當(dāng)前對(duì)應(yīng)的遠(yuǎn)程倉(cāng)庫(kù)信息
如果想要更改對(duì)應(yīng)的遠(yuǎn)程倉(cāng)庫(kù),就需要首先刪除當(dāng)前設(shè)置的origin锐秦,然后再次添加新的origin咪奖。
git remote rm origin #刪除設(shè)置
git remote -v #再次查看遠(yuǎn)程信息應(yīng)當(dāng)不會(huì)顯示任何內(nèi)容
git remote add origin git@github.com:XXXX/XXXX.git #初始化所要上傳的遠(yuǎn)程倉(cāng)庫(kù)
關(guān)于origin具體所指的是什么,可以參考這篇文章github中origin和upstream的區(qū)別酱床。
然后羊赵,我們?cè)賮斫忉?git push -u origin master'命令。git push十分易于理解,即一個(gè)push命令昧捷。使用參數(shù)-u是因?yàn)槭褂煤笙姓眩麓慰梢灾苯邮褂胓it push代替git push origin master。master是指定上傳master分支靡挥。
$ git push
The current branch master has no upstream branch.To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
若看過上一個(gè)文章鏈接序矩,會(huì)對(duì)upstream有更多一些的理解。具體對(duì)此命令解釋可以參考此篇文章git push origin和git push -u origin master區(qū)別跋破。
*可能遇到的問題:
如果遠(yuǎn)程倉(cāng)庫(kù)并非一個(gè)新建的空倉(cāng)庫(kù)簸淀,直接push,github會(huì)操作失敗毒返。因?yàn)楸镜睾瓦h(yuǎn)程的內(nèi)容不一致租幕,遠(yuǎn)程有本地所沒有的文件,github并不會(huì)只把本地倉(cāng)庫(kù)中遠(yuǎn)程倉(cāng)庫(kù)沒有的文件或后續(xù)更新上傳拧簸。我們首先需要把遠(yuǎn)程倉(cāng)庫(kù)文件pull到本地劲绪。使用git pull命令即可。若出現(xiàn)問題可以嘗試以下命令:
git pull origin master --allow-unrelated-histories #這個(gè)命令會(huì)強(qiáng)制把遠(yuǎn)程庫(kù)中不在本地的文件全部pull到本地
接下來再使用git push即可盆赤,如果成功贾富,打開github,會(huì)看到之前在本地但不在遠(yuǎn)程倉(cāng)庫(kù)中的文件已經(jīng)被添加進(jìn)了倉(cāng)庫(kù)中牺六。
一點(diǎn)備注:
個(gè)人在VScode內(nèi)使用github時(shí)颤枪,基本都是使用終端操作,只有commit和push可能會(huì)使用VScode內(nèi)的按鍵而非終端命令兔乞。不過汇鞭,VScode目前覺得唯一的優(yōu)點(diǎn)在于可以很方便的看到倉(cāng)庫(kù)內(nèi)版本狀況,如文件在倉(cāng)庫(kù)內(nèi)但還未追蹤庸追,或是更改后但尚未commit霍骄。
以上就是目前為止的進(jìn)度,關(guān)于github的使用暫時(shí)探索到這個(gè)程度淡溯。
原本準(zhǔn)備4月10號(hào)更的文章一直拖到現(xiàn)在才更读整,是由于之前畢業(yè)論文要求定稿了,又有兩場(chǎng)考試突然通知咱娶,急急忙忙需要復(fù)習(xí)米间,今晚八點(diǎn)剛剛完成了考試,安排接下來的計(jì)劃時(shí)膘侮,想起欠的這篇文章趕緊寫掉屈糊。距離畢業(yè)只剩下答辯和一門通識(shí)課程了,接下里會(huì)安心學(xué)習(xí)編程和CFA琼了,可以返校后也要拿到教材開始復(fù)習(xí)考研了逻锐。