做網(wǎng)站域名 空間廣州競價托管
GitHub使用
經(jīng)過上一篇的文章,相信大家已經(jīng)對git的基本操作熟悉了,但哪些使用git的方法只是在本地倉庫進(jìn)行,本文介紹如何使用git和遠(yuǎn)程倉庫進(jìn)行連接使用。
Github和Gitee
主要用到的兩個遠(yuǎn)程倉庫在線平臺是github和gitee
GitHub
GitHub 是全球最大的代碼托管平臺之一,由 GitHub Inc. 運(yùn)營,后來被微軟收購。它不僅是一個代碼倉庫,還是一個社交編程網(wǎng)站,用戶可以關(guān)注其他開發(fā)者、創(chuàng)建組織和團(tuán)隊(duì)、管理項(xiàng)目等。GitHub 提供了免費(fèi)的公共倉庫和付費(fèi)的私有倉庫選項(xiàng),以及一系列的開發(fā)工具和集成服務(wù)。
Gitee(碼云)
Gitee 是中國的代碼托管平臺,類似于 GitHub,但它針對中國用戶進(jìn)行了優(yōu)化,提供了更快的數(shù)據(jù)傳輸速度和更好的中文支持。Gitee 同樣支持公共和私有倉庫,提供項(xiàng)目管理、代碼審查、持續(xù)集成等功能。由于其在中國的服務(wù)器位置,Gitee 在國內(nèi)訪問速度通常比 GitHub 快。
使用Gitee對于中國人更加友好,但如果你英語過關(guān)的話,可以嘗試去github上面看看,github上面的項(xiàng)目更多,尤其是一些涉及前沿技術(shù)的項(xiàng)目。下面的示例我也將使用github進(jìn)行展示,在熟練使用github之后,gitee的使用就會非常簡單了。
Github基本概念
在github中打開一個項(xiàng)目之后,其中會包含一些菜單選項(xiàng)
Repository:倉庫的意思,即你的項(xiàng)目,你想在 GitHub 上開源一個項(xiàng)目,那就必須要新建一個 Repository,如果你開源的項(xiàng)目多了,你就擁有了多個 Repositories 。
Issue:問題的意思,舉個例子,就是你開源了一個項(xiàng)目,別人發(fā)現(xiàn)你的項(xiàng)目中有bug,或者哪些地方做的不夠好,他就可以給你提個 Issue ,即問題,提的問題多了,也就是 Issues ,然后你看到了這些問題就可以去逐個修復(fù),修復(fù)ok了就可以一個個的 Close 掉。
Star:這個好理解,就是給項(xiàng)目點(diǎn)贊,但是在 GitHub 上的點(diǎn)贊遠(yuǎn)比微博、知乎點(diǎn)贊難的多,如果你有一個項(xiàng)目獲得100個star都算很不容易了!
**Fork:**這個不好翻譯,如果實(shí)在要翻譯我把他翻譯成分叉,什么意思呢?你開源了一個項(xiàng)目,別人想在你這個項(xiàng)目的基礎(chǔ)上做些改進(jìn),然后應(yīng)用到自己的項(xiàng)目中,這個時候他就可以 Fork 你的項(xiàng)目,這個時候他的 GitHub 主頁上就多了一個項(xiàng)目,只不過這個項(xiàng)目是基于你的項(xiàng)目基礎(chǔ)(本質(zhì)上是在原有項(xiàng)目的基礎(chǔ)上新建了一個分支,分支的概念后面會在講解Git的時候說到),他就可以隨心所欲的去改進(jìn),但是絲毫不會影響原有項(xiàng)目的代碼與結(jié)構(gòu)。
Pull Request:發(fā)起請求,這個其實(shí)是基于 Fork 的,還是上面那個例子,如果別人在你基礎(chǔ)上做了改進(jìn),后
來覺得改進(jìn)的很不錯,應(yīng)該要把這些改進(jìn)讓更多的人收益,于是就想把自己的改進(jìn)合并到原有項(xiàng)目里,這個時候他就可以發(fā)起一個 Pull Request(簡稱PR) ,原有項(xiàng)目創(chuàng)建人就可以收到這個請求,這個時候他會仔細(xì)review你的代碼,并且測試覺得OK了,就會接受你的PR,這個時候你做的改進(jìn)原有項(xiàng)目就會擁有了。
Watch:這個也好理解就是觀察,如果你 Watch 了某個項(xiàng)目,那么以后只要這個項(xiàng)目有任何更新,你都會第一時間收到關(guān)于這個項(xiàng)目的通知提醒。
Gist:有些時候你沒有項(xiàng)目可以開源,只是單純的想分享一些代碼片段,那這個時候 Gist 就派上用場了!
創(chuàng)建github項(xiàng)目
在github整個界面的右上角的加號,選擇【create new repository】創(chuàng)建一個新的github倉庫,以下是一些創(chuàng)建倉庫時的選項(xiàng)。
創(chuàng)建好之后你的倉庫圖如下:
雖然其中只有一個自動生成的README文件,但是它已經(jīng)是一個完整的倉庫了,可以正常使用包括clone等命令。
README文件可以理解為是這個項(xiàng)目的說明書,這個文件中的內(nèi)容應(yīng)該包括如何部署和調(diào)整運(yùn)行整個項(xiàng)目,該文件使用markdown語法進(jìn)行編寫,和寫博客一樣,在正式的項(xiàng)目中,README文件非常重要,應(yīng)該精心書寫。
向github提交項(xiàng)目
SSH
為了防止隨意提交造成的混亂,提交代碼之前一定是需要某種授權(quán)的,而 GitHub 上一般都是基于 SSH 授權(quán)的。SSH是一種網(wǎng)絡(luò)協(xié)議,用于計算機(jī)之間的加密登錄。目前是每一臺 Linux 電腦的標(biāo)準(zhǔn)配置。在安裝了git之后,Windows系統(tǒng)也有SSH服務(wù),而大多數(shù) Git 服務(wù)器都會選擇使用 SSH 公鑰來進(jìn)行授權(quán),所以想要在 GitHub 提交代碼的第一步就是要先添加 SSH key 配置。
SSHkey
在安裝完git后應(yīng)該會自動安裝好SSH服務(wù),可以在git bash(命令行)中輸入ssh查看,如果沒有顯示下面的內(nèi)容可以自己安裝一下ssh服務(wù)。
輸入命令ssh-keygen -t rsa
指定rsa算法生成密鑰,然后連續(xù)三個回車(不要進(jìn)行輸入),在Windows系統(tǒng)目錄/c/用戶/用戶名/.ssh
(隱藏文件)下面就會看到兩個文件id_rsa 和id_rsa.pub ,而 id_rsa 是密鑰,id_rsa.pub 就是公鑰。
github上面添加ssh key
在github中,點(diǎn)擊右上角頭像的settings,在設(shè)置中選擇【SSH and GPG keys】,選擇【New SSH Key】添加一個新的SSH Key
然后把id_sra.pub(記事本打開)公鑰中的內(nèi)容給粘貼進(jìn)去即可
在這一步可以不設(shè)置ssh的Title,github會根據(jù)公鑰中的內(nèi)容自動識別用戶名并將其作為Title
在設(shè)置完ssh之后,使用ssh -T git@github.com
命令測試是否配置成功
PUSH & PULL
push直譯過來就是「推」的意思,如果你本地代碼有更新了,那么就需要把本地代碼推到遠(yuǎn)程倉庫,這樣本地倉庫跟遠(yuǎn)程倉庫就可以保持同步了。
【示例】把本地代碼推到遠(yuǎn)程倉庫mian分支
git push origin mian
pull直譯過來就是「拉」的意思,如果別人提交代碼到遠(yuǎn)程倉庫,這個時候你需要把遠(yuǎn)程倉庫的最新代碼拉下來,然后保證兩端代碼的同步。
【示例】把遠(yuǎn)程倉庫mian分支中的代碼拉到本地
git pull origin mian
一般我們在push之前都會先pull ,這樣不容易沖突。
克隆和提交代碼
添加 SSH key 成功之后,就可以實(shí)現(xiàn)克隆項(xiàng)目和代碼的提交
克隆項(xiàng)目
我們之前在github上面創(chuàng)建了一個test項(xiàng)目,現(xiàn)在讓我們用clone命令將其克隆到本地,讓我們再創(chuàng)建一個空文件,不需要init(初始化),直接使用clone命令git clone https://github.com/dao-ca-ren/test.git
打開repository右上角的code就可以找到對應(yīng)的倉庫地址
克隆之后,原本的空文件夾就變成了一個git倉庫,其中有我們遠(yuǎn)程倉庫中的內(nèi)容,此時的這個本地倉庫就和遠(yuǎn)程倉庫綁定好了,修改完本地的內(nèi)容后進(jìn)行commit之后,就可以直接使用push將修改內(nèi)容推到遠(yuǎn)程倉庫中。
綁定遠(yuǎn)程倉庫
如果我們本地已經(jīng)建立好一個倉庫,上面的方法就不適合使用了,此時需要將本地倉庫和遠(yuǎn)程倉庫建立關(guān)聯(lián)之后在進(jìn)行push才行。
git remote add origin https://github.com/dao-ca-ren/test.git
在本地倉庫中,運(yùn)行上述命令綁定遠(yuǎn)程倉庫,其地址為https://github.com/dao-ca-ren/test.git,origin為給遠(yuǎn)程倉庫起的名字,因?yàn)橐粋€復(fù)雜的項(xiàng)目可能會有多個遠(yuǎn)程倉庫,這時候就需要我們使用名字進(jìn)行區(qū)分。
查看當(dāng)前項(xiàng)目有哪些遠(yuǎn)程倉庫:
git remote -v
上述的fetch和push是兩種不同的操作,后續(xù)為你詳細(xì)介紹
現(xiàn)在我們再來看一遍push操作,其中的命令含義我們就都懂了
git push origin mian
把當(dāng)前本地目錄的改動,推到origin遠(yuǎn)程倉庫的mian分支
fetch
在Git中,fetch
命令用于從遠(yuǎn)程倉庫下載數(shù)據(jù)并將其合并到本地倉庫中,但不會自動合并這些更改。它將遠(yuǎn)程分支的快照復(fù)制到你的本地倉庫中,作為遠(yuǎn)程跟蹤分支。這樣你可以在之后選擇性的將這些更改合并到你的工作分支中。
基本用法
1. Fetch所有遠(yuǎn)程倉庫的更改
git fetch
2. Fetch特定遠(yuǎn)程倉庫的所有更改
git fetch <remote_name>
其中 <remote_name>
是你想要從其獲取更新的遠(yuǎn)程倉庫的名稱。例如,如果你的遠(yuǎn)程倉庫名為 origin
,則命令為:
git fetch origin
3. Fetch特定遠(yuǎn)程倉庫的特定分支
git fetch <remote_name> <branch_name>
這會將遠(yuǎn)程分支的最新狀態(tài)拉取到本地。例如,拉取 origin
遠(yuǎn)程倉庫中的 main
分支:
git fetch origin main
查看遠(yuǎn)程分支
使用 fetch
后,你可以查看遠(yuǎn)程分支的狀態(tài):
git branch -r
合并遠(yuǎn)程分支到當(dāng)前分支
如果你想將遠(yuǎn)程分支的更改合并到你的當(dāng)前分支,可以使用以下命令:
git merge <remote_name>/<branch_name>
例如,將 origin/main
合并到當(dāng)前分支:
git merge origin/main
注意事項(xiàng)
- 在執(zhí)行
fetch
命令之前,最好先確認(rèn)你的工作目錄是干凈的,沒有未提交的更改。 - 如果你只是想同步遠(yuǎn)程倉庫的最新狀態(tài)而不立即合并更改,那么使用
fetch
而不是pull
更為合適。 - 使用
fetch
和merge
可以讓你更細(xì)粒度地控制合并流程,避免不必要的沖突。 fetch
不會改變你的工作樹或當(dāng)前 HEAD 的位置。
整個本地倉庫加上遠(yuǎn)程倉庫的命令和流程如下圖所示