Git clone之后你的硬盘上究竟发生了什么?
網(wǎng)上關(guān)于Git的使用有太多的博客,文章在講解了,大部分是在講解命令的用法,剩下一部分則在講解git的內(nèi)部原理,看過講解基礎(chǔ)命令使用的文章后,正常的開發(fā)使用是沒有什么問題的了,而如果想更深入的了解git“高級(jí)”使用,去看第二類講解內(nèi)部原理(數(shù)據(jù)結(jié)構(gòu),源碼實(shí)現(xiàn))的文章,往往感覺過于“高深”,復(fù)雜,(而且對(duì)git的使用上并不會(huì)有太多幫助),其實(shí)介于兩者之間的知識(shí)可能對(duì)于git進(jìn)階更有幫助。
Git的原理和使用其實(shí)很簡(jiǎn)單,看懂下面這張圖就可以了:
上圖轉(zhuǎn)自伯樂在線上的一篇文章,侵刪。
其實(shí)我感覺這應(yīng)該是某一本講解git原理的書上的配圖(由于學(xué)習(xí)git過程中都是網(wǎng)上搜索和自悟獲取,沒有看過專門的git書籍,不太清楚是那本書)
為了符合文章的標(biāo)題,這里只簡(jiǎn)單說(shuō)明下右半部分,這個(gè)是大部分基礎(chǔ)使用文章忽略的(基礎(chǔ)使用都會(huì)著重講解staging area這部分),而高級(jí)教程中對(duì)于右半邊又都是一筆帶過,或者大家都不會(huì)太注意這部分吧。
git clone之后究竟發(fā)生了什么?
- remote repository:這個(gè)不用過多解釋,雖然git是分布式的代碼管理工具,但大部分公司,組織都會(huì)建立一個(gè)集中的代碼倉(cāng)庫(kù)服務(wù)器。(這里想到區(qū)塊鏈到底后面會(huì)發(fā)展成半集中式還是完全分布式的呢?)該代碼倉(cāng)庫(kù)存儲(chǔ)著所有開發(fā)人員push上去的代碼和branchs。
- 開發(fā)者鍵入git clone后,git會(huì)將遠(yuǎn)端所有的代碼和branchs下載到開發(fā)者本地。
- 有人會(huì)問,可是我git branch只看到一個(gè)branch(默認(rèn)情況應(yīng)該是master branch。不過倉(cāng)庫(kù)服務(wù)端可以進(jìn)行配置其他任意branch為默認(rèn)主分支)。git branch的確只能看到一個(gè)branch(在本地沒有進(jìn)行checkout -b參操作的情況下),因?yàn)槠渌鸼ranch需要用git banch -r(Git branch -a)才能看到。
- 這時(shí)有人又會(huì)問,git branch -r看到的不是遠(yuǎn)端的分支嗎?好吧,其實(shí)本文的唯一有價(jià)值的地方就在這里了。git branch -r看到的不是遠(yuǎn)端服務(wù)的branchs,而是你的本地的遠(yuǎn)端 branchs,git clone后在remote/origin repository區(qū)保存一份和此時(shí)遠(yuǎn)端分支一模一樣的代碼和branchs,而且該區(qū)域是不能修改的。
- 如果想修改怎么辦,git checkout -b master origin/master相信大家都用過類似的命令,這個(gè)是從遠(yuǎn)端拉出一個(gè)branch嗎?不是,這是從你的本地的遠(yuǎn)端區(qū)域里的master branch拉出一個(gè)branch。而新拉出的branch就是存儲(chǔ)在你的local repository區(qū)域里,這個(gè)區(qū)域是可以修改的,也就是git branch看到的那些branchs。
理解了以上兩個(gè)區(qū)域后面有些命令的原理就十分清楚了
- git pull做了什么?
- 大家都知道git pull = git fetch + git merge兩個(gè)操作。
- git fetch做了什么?
- git fetch其實(shí)是更新下你的本地的遠(yuǎn)端代碼區(qū)域(remote/origin repository)的數(shù)據(jù)同服務(wù)端的代碼保持一致。
- 基于以上的說(shuō)明,git pull的最后一步,就是把remote/origin repository區(qū)域中的相應(yīng)的branch(已更新到服務(wù)端最新代碼) merge到本地區(qū)域(local repository)的branch上。
以上是自己對(duì)git對(duì)代碼管理上的一些理解,不保證正確性,因?yàn)槲覜]有看過一行g(shù)it源碼,以上的分析只是從各種文章,流程圖,以及實(shí)際使用中推理得出的。只是感覺它應(yīng)該就是這一個(gè)樣子的。希望沒有誤導(dǎo)別人。
最后說(shuō)下我對(duì)git的看法:git不僅僅是一個(gè)代碼管理工具,它是一種工作方式,基于git的工作流,你可以高效的進(jìn)行開發(fā)工作,通過git的各種命令的組合使用,基本上可以解決你所遇到的所有問題,你可以告別copy n份代碼,管理n個(gè)目錄,告別beyond compare。
總結(jié)
以上是生活随笔為你收集整理的Git clone之后你的硬盘上究竟发生了什么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Retry 重试机制实现及
- 下一篇: Tcp三次握手和四次挥手状态图