git 入門教程之本地倉庫和遠(yuǎn)程倉庫的本質(zhì)介紹
本地倉庫和遠(yuǎn)程倉庫在本質(zhì)上沒有太大區(qū)別,只不過一個是本地電腦,一個是遠(yuǎn)程電腦.
遠(yuǎn)程倉庫不一定非得是 github
那種專門的"中央服務(wù)器",甚至局域網(wǎng)的另外一臺電腦也可以充當(dāng)"中央服務(wù)器"的角色,因為它存在的最初目的只是方便大家交換彼此的提交記錄而已!
所以本地倉庫和遠(yuǎn)程倉庫的基本行為應(yīng)該是一致的,約定俗成的規(guī)定是遠(yuǎn)程倉庫一般不直接參與日常開發(fā)工作,主要作為項目托管中心.
某些自動化持續(xù)集成環(huán)境中也可能會直接操作遠(yuǎn)程倉庫,這時遠(yuǎn)程倉庫就真的和本地倉庫沒什么區(qū)別了!
個人開發(fā)常用命令
個人開發(fā)看重的是效率,同時兼顧下版本控制的話算是是錦上添花,git
的本地倉庫是本地備份,而遠(yuǎn)程倉庫則是網(wǎng)盤備份.
git init
: 初始化本地項目
將本地項目初始化 git
項目,直觀表現(xiàn)是在該項目同級目錄下多了 .git
隱藏目錄,其存儲著 git
版本庫相關(guān)信息.
此后當(dāng)前項目便具備了本地管理的能力,可以與 git
進(jìn)行交互.
git clone
: 克隆遠(yuǎn)程項目
同 git init
一樣的作用,也是創(chuàng)建本地倉庫,只不過 git init
是直接將本地項目作為本地倉庫,而git clone
是將遠(yuǎn)程項目克隆到本地并作為本地倉庫.
由此可見,git clone
比 git init
多了一層遠(yuǎn)程倉庫的概念.
git add
: 添加文件
將工作區(qū)的提交記錄添加到暫存區(qū),暫存區(qū)是工作區(qū)和版本庫交互的橋梁,暫存區(qū)積累到一定量的提交記錄時可以批量提交到版本庫,這一點暫存區(qū)有點像緩存.
git commit
: 提交文件
將暫存區(qū)的版本提交到版本庫,從而形成工作區(qū)->暫存區(qū)->版本庫的基本鏈路,本地工作區(qū)的版本控制流程大致如此.
git push
: 推送文件
如果是使用 git clone
命令克隆的本地項目,當(dāng)工作到一定程度時可能需要將這部分工作成果推送到遠(yuǎn)程倉庫,這時候使用 git push
命令完成本地版本的推送流程.
如果是使用 git init
命令初始化的本地項目,可能沒有遠(yuǎn)程倉庫,自然也就不需要推送.如果后來創(chuàng)建了遠(yuǎn)程倉庫,那么你自然是想要將本地倉庫推送到遠(yuǎn)程倉庫的,因此你需要準(zhǔn)確告訴 git
你要推送到哪個遠(yuǎn)程倉庫.
使用 git remote add origin git@github.com:username/repos.git
命令添加遠(yuǎn)程倉庫信息,這樣就建立了本地倉庫和遠(yuǎn)程倉庫的關(guān)聯(lián),以后就可以正常推送到遠(yuǎn)程倉庫了.
團(tuán)隊開發(fā)常用命令
團(tuán)隊開發(fā)注重的不僅是個人效率還有團(tuán)隊的整體進(jìn)度,隨著企業(yè)級開發(fā)的日趨復(fù)雜化,不再是一個人能夠獨立完成的,更何況時間也不允許慢慢完成,大多數(shù)公司采用的是人力換時間的方式,團(tuán)隊并行開發(fā)來縮短整個項目周期,這種復(fù)雜需求下正是 git
大展拳腳的好機(jī)會.
項目整體采用并行開發(fā)模式,拆解成不同的功能模塊,每個人負(fù)責(zé)各自模塊,模塊之間相對獨立但也不排除存在交集的可能性.對于每一個個體開發(fā)者來說,既需要版本控制又需要團(tuán)隊交流.這時候分支的作用就凸顯出來了.
根據(jù)項目的業(yè)務(wù)特點將其拆解成不同的功能模塊,這些功能模塊分別代表不同的分支,而這些功能模塊又組成了完整的項目,這就是主干和分支的關(guān)系.
初始時項目是一個整體,中間拆解成不同功能模塊,最后再合并成一個整---"分久必分合久必分".
git branch <branch>
: 創(chuàng)建分支
每一個獨立的功能模塊被定義成一個單獨分支,創(chuàng)建分支的過程其實是拆解項目的過程,創(chuàng)建本地分支后就在分支上開發(fā)特有功能,不再關(guān)心其他功能分支.
git checkout <branch>
: 切換分支
模塊拆解完成并創(chuàng)建了相應(yīng)的分支后,需要切換到既定分支上才能開展自己的工作.
git merge <branch>
: 合并分支
沒有絕對的獨立,項目再怎么拆分也是整體的一部分,肯定需要和其他功能模塊發(fā)生關(guān)系,某些情況下需要其他分支的工作成果合并到自己的本地倉庫中,這樣才能完成一次小規(guī)模的組裝.
可以預(yù)期的是,當(dāng)這種組裝足夠多的時候,最終便會演變成項目的終極形態(tài),形成一個整體.
git fetch
: 抓取遠(yuǎn)程分支
合并目標(biāo)分支首先需要能夠獲取到目標(biāo)分支的提交記錄,既然每個功能模塊都是不同的項目成員負(fù)責(zé)開發(fā)的,也就不在我們電腦上,所以我們先要將目標(biāo)分支下載到我們本地電腦,然后才能合并該分支到本地分支.
git pull
: 拉取遠(yuǎn)程分支
"先下載目標(biāo)分支再合并到本地分支,從而小規(guī)模組成更復(fù)雜更強(qiáng)大的功能",每一次的組裝過程都需要兩步操作者顯然不符合懶人思維啊,git pull
就是這兩步操作的簡化命令,先下載再合并就是這么簡單!
本地和遠(yuǎn)程倉庫的碰撞
不論是個人開發(fā)還是團(tuán)隊開發(fā),我們幾乎習(xí)慣慣站在主動方的角度來思考問題,有沒有想過當(dāng)遠(yuǎn)程倉庫接收到我們的git push
或 git pull
請求時,遠(yuǎn)程倉庫發(fā)什么了什么改變,這種改變對本地倉庫又有什么影響?
遠(yuǎn)程倉庫(遠(yuǎn)程電腦上的本地倉庫)只是眾多分布式電腦上本地倉庫中的一員,說它特殊也很特殊,充當(dāng)著"中央服務(wù)器"作用,其余人統(tǒng)一從這里下載或推送;說它普通也很普通,和本地電腦上的本地倉庫沒有什么不同,因為它隨時可被任意電腦上的本地倉庫所取代!
揭開遠(yuǎn)程倉庫的神秘面紗后,現(xiàn)在我們只需要將其視為普通的本地倉庫一樣對待即可,然而我們本地電腦上已經(jīng)有了本地倉庫,故而需要將遠(yuǎn)程倉庫做一下簡單標(biāo)識區(qū)分(origin
)稱之為遠(yuǎn)程分支.
先說說 git push
命令做了什么?
- 對于本地來說,
git
將本地倉庫的指定分支推送到遠(yuǎn)程倉庫的相應(yīng)分支,同時更新了本地倉庫的遠(yuǎn)程分支. - 對于遠(yuǎn)程來說,
git
接收到本地倉庫的推送請求時應(yīng)該在相應(yīng)分支上合并本地分支,同時更新遠(yuǎn)程倉庫的相應(yīng)分支.
只要本地的指定分支成功推送到遠(yuǎn)程的相應(yīng)分支時,對于本地來說,不論是指定分支還是遠(yuǎn)程分支(origin/master
)都應(yīng)該是最新狀態(tài),因為已經(jīng)與服務(wù)器同步了.
而遠(yuǎn)程接收到此次推送請求時,應(yīng)該嘗試合并此次推送請求,再更新自己的相應(yīng)分支,遠(yuǎn)程合并完成后再通知本地此次推送結(jié)果,如此一來,三端同步,皆大歡喜!
再講講 git pull
命令發(fā)生了什么?
- 對于遠(yuǎn)程來說,接收到本地的拉取請求時,因為沒有新版本需要處理,所以無需任何操作.
- 對于本地來說,當(dāng)遠(yuǎn)程倉庫的相應(yīng)分支下載到本地時應(yīng)該更新遠(yuǎn)程分支狀態(tài),再嘗試合并到本地的相應(yīng)分支.
git pull
命令或者說是 git fetch
命令是本地和遠(yuǎn)程通信的方式,所以 origin/master
會自動更新!
小結(jié)
本地倉庫和遠(yuǎn)程倉庫本質(zhì)上沒有太大區(qū)別, git fetch
是本地倉庫和遠(yuǎn)程倉庫之間的通信途徑,本地倉庫中的遠(yuǎn)程分支(origin/master
)保存著它們之間最后一次的通信狀態(tài).
到此這篇關(guān)于git 入門教程之本地倉庫和遠(yuǎn)程倉庫的本質(zhì)介紹的文章就介紹到這了,更多相關(guān)git 本地和遠(yuǎn)程倉庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實例詳解esp8266解析json數(shù)據(jù)的方法
這篇文章主要介紹了實例詳解esp8266解析json數(shù)據(jù)的方法,主要包括要解析的json文件,反序列化數(shù)據(jù)獲取到對象中,通過串口監(jiān)視器輸出解析后的數(shù)據(jù)信息,需要的朋友可以參考下2022-03-03git分支的創(chuàng)建、切換、合并及刪除操作小結(jié)
這篇文章給大家詳細(xì)的介紹了關(guān)于git分支的操作,其中包括查看現(xiàn)存分支、創(chuàng)建分支、切換分支、提交分支、分支合并以及刪除分支,文中給出了詳細(xì)示例代碼,相信對大家的學(xué)習(xí)和理解很有幫助,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11回車和換行有什么區(qū)別?我們平時按下的Enter鍵是回車還是換行
如果用過機(jī)械打字機(jī),就知道回車和換行的區(qū)別了。換行就是把滾筒卷一格,不改變水平位置。回車就是把水平位置復(fù)位,不卷動滾筒2011-03-03adb shell input keyevent 控制按鍵輸入的數(shù)值(收藏版)
adb shell的功能很強(qiáng)大,可以使用很多功能,今天我們說下通過控制按鍵輸入,需要的朋友可以參考下2019-10-10