寫在前面
最近發(fā)現(xiàn)自己有些健忘搀愧,一些沒有系統(tǒng)學(xué)習(xí)的知識(shí)很容易忘記氢烘,例如git的一些命令還有g(shù)ithub操作执桌。這些原來(lái)都是看網(wǎng)上博客學(xué)習(xí)的,比較零散也沒有記錄先巴,當(dāng)時(shí)就是即學(xué)即用其爵,用完也就忘了。再簡(jiǎn)單的東西不總結(jié)也難以抵擋長(zhǎng)時(shí)間不用的沖擊伸蚯。所以寫一點(diǎn)總結(jié)摩渺,方便以后長(zhǎng)時(shí)間不用時(shí)還能快速上手。
本文只為了初學(xué)者關(guān)聯(lián)本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)而服務(wù)剂邮,不涉及git的具體使用摇幻。全文內(nèi)容大致分成以下幾個(gè)方面
- 從GitHub 創(chuàng)建倉(cāng)庫(kù),再clone到本地進(jìn)行關(guān)聯(lián)
- git基本配置,ssh key生成與配置
- 從GitHub 創(chuàng)建空倉(cāng)庫(kù)绰姻,將本地倉(cāng)庫(kù)與其關(guān)聯(lián)
- 關(guān)聯(lián)之后如何提交到GitHub
正惩鞑啵可以通過(guò)1、3兩步或者2狂芋、3兩步來(lái)進(jìn)行本地與遠(yuǎn)程的關(guān)聯(lián)榨馁。
大致寫完之后發(fā)現(xiàn)有些亂,沒啥體系帜矾。本來(lái)想著就私有吧翼虫,但是私有已經(jīng)夠多了,為簡(jiǎn)書加點(diǎn)創(chuàng)作量吧黍特。
1. 從GitHub創(chuàng)建repo并clone到本地
GitHub創(chuàng)建repo很簡(jiǎn)單就不說(shuō)了蛙讥,按步驟來(lái)就行。
接下來(lái)是在本地clone遠(yuǎn)程倉(cāng)庫(kù)灭衷,執(zhí)行命令({xxx}表示需要換成自己的)
git clone git@github.com:{user_name}:{repo_name}.git
git clone https://github.com/{user_name}/{repo_name}.git
兩種clone方式次慢,ssh和https都可以,在這之前要進(jìn)行一些配置翔曲。下面具體介紹如何clone
1.1 git初始化配置:user name和email
這是在下載git后的第一步配置迫像,設(shè)置成遠(yuǎn)程(GitHub)的用戶名和郵箱
git config --global user.name "{user_name}"
git config --global user.email "{user_email}"
查看配置信息
git config --list
1.2 生成 SSH Key 并添加到GitHub
ssh key生成在~/.ssh目錄下。執(zhí)行
cd ~/.ssh
ls
查看是否存在 id_rsa 以及 id_rsa.pub文件(rsa是密鑰的意思)瞳遍,若不存在則需要生成ssh key闻妓。執(zhí)行
ssh-keygen -t rsa -C "user_email"
之后會(huì)有一些操作,一路回車即可掠械,生成上述兩個(gè)文件由缆,其中id_rsa.pub的內(nèi)容是我們需要的ssh key,需要在GitHub中添加該ssh key猾蒂。
在GitHub中添加也很簡(jiǎn)單均唉,settings -> SSH and GPG keys 去添加即可。添加之后表示在本機(jī)上可以通過(guò)ssh連接到GitHub的遠(yuǎn)程倉(cāng)庫(kù)肚菠。
驗(yàn)證是否成功添加SSH Key舔箭,可以執(zhí)行
ssh -T git@github.com
// 返回: Hi {user_name}! You've successfully authenticated, but GitHub does not provide shell access.
// 表示成功添加
1.3 clone public/private repo
此時(shí)已經(jīng)可以直接 clone public repo 了,使用 https 和 ssh 都可以蚊逢。
1.4 一些已知問(wèn)題
1.4.1 配置好 ssh key 之后連接不到 GitHub
問(wèn)題形式
$ ssh -T git@github.com
ssh: connect to host github.com port 22: Connection timed out
此為網(wǎng)絡(luò)問(wèn)題层扶,時(shí)而好時(shí)而不好。
還有可能是開啟了代理的緣故烙荷【祷幔可以嘗試更換 443 端口,詳見Using SSH over the HTTPS port - GitHub Docs
1.4.2 clone 的時(shí)候報(bào)錯(cuò)
報(bào)錯(cuò)內(nèi)容
ssh: connect to host github.com port 22: Connection timed out
fatal: Could not read from remote repository.
該問(wèn)題與上面一致终抽,網(wǎng)絡(luò)問(wèn)題戳表,參上焰薄。
2. 從本地創(chuàng)建repo并提交到Github
這種方法和第一種方法殊途同歸。只是一個(gè)從本地關(guān)聯(lián)到遠(yuǎn)程扒袖,一個(gè)從遠(yuǎn)程關(guān)聯(lián)到本地塞茅。從GitHub上clone會(huì)自帶GitHub的遠(yuǎn)程庫(kù)信息,而從本地新建關(guān)聯(lián)到遠(yuǎn)程需要remote add源季率。
以下部分摘自提交本地代碼到github - 只會(huì)玩輔助 - 博客園 (cnblogs.com)
- 需要先把本地代碼文件夾初始化成git倉(cāng)庫(kù)
- 本地代碼文件夾叫做工作區(qū)野瘦,需要先把工作區(qū)的代碼存到暫存區(qū),通過(guò)git add .
- 然后將暫存區(qū)的代碼提交到本地的版本庫(kù) 通過(guò)git commit -m '提交信息'
- 最后將本地版本庫(kù)提交到github倉(cāng)庫(kù)
1)本地代碼文件夾初始化成git倉(cāng)庫(kù)
git init
執(zhí)行后會(huì)生成.git目錄
2)本地代碼文件夾叫做工作區(qū)飒泻,需要先把工作區(qū)的代碼存到暫存區(qū)鞭光,通過(guò)git add .
在對(duì)本地項(xiàng)目進(jìn)行編輯后,需要將工作區(qū)的文件添加到暫存區(qū)泞遗,讓git進(jìn)行記錄惰许,這里涉及到git的運(yùn)行機(jī)制
git add . // 點(diǎn)表示當(dāng)前目錄下所有文件
3)然后將暫存區(qū)的代碼提交到本地的版本庫(kù) 通過(guò)git commit -m '提交信息'
提交的是當(dāng)前版本,提交之后可以通過(guò)git log查看本次提交版本
git commit -m "commit message"
4)最后將本地版本庫(kù)提交到github倉(cāng)庫(kù)
這里首先需要在GitHub上創(chuàng)建一個(gè)空項(xiàng)目史辙,注意 GitHub 在 initialize 的提示 Skip this step if you’re importing an existing repository.
然后執(zhí)行下述命令去關(guān)聯(lián)遠(yuǎn)程庫(kù)汹买,可以在.git/config中查看相關(guān)信息
git remote add origin git@github.com:{user_name}/{repo_name}.git // origin 是遠(yuǎn)程庫(kù)的名字,可以自定義
再把本地版本庫(kù)提交到遠(yuǎn)程
git push -u origin master // origin是遠(yuǎn)程庫(kù)的名字聊倔,可以自定義晦毙;master是分支名,是默認(rèn)的主分支
3. 已經(jīng)關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)
3.1 將本地修改提交到GitHub遠(yuǎn)程倉(cāng)庫(kù)
此時(shí)編輯文件耙蔑,或者新建文件之后见妒,可以執(zhí)行 git status
查看某些文件會(huì)出現(xiàn)紅色信息表示尚未add到暫存區(qū),相當(dāng)于從 2 中的 2)開始甸陌,不過(guò)省去了4)git remote add 關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)的步驟须揣。
簡(jiǎn)而言之就是執(zhí)行下述命令
git add .
git commit -m "new commit"
git push origin main
3.2 拉取遠(yuǎn)程倉(cāng)庫(kù)內(nèi)容到本地
git pull origin main
至此已經(jīng)結(jié)束了,可以完成本地和遠(yuǎn)程單個(gè)庫(kù)的交互钱豁。沒有說(shuō)明每個(gè)命令背后的邏輯耻卡,所以遇到與文中不一樣的信息時(shí)可能會(huì)難以進(jìn)行下去。
最后附一些其他感覺不錯(cuò)的相關(guān)博文以供參考