Git大法好——1.Git的引入以及概念解析

Git大法好——1.Git的引入以及概念解析

標(biāo)簽:Git


引言

在前面學(xué)習(xí)安卓基礎(chǔ)入門(mén)的時(shí)候渤愁,簡(jiǎn)單的講解了一下Git的簡(jiǎn)單使用愚争,幾個(gè)基本的命令這樣,
讓讀者對(duì)Git有了初步的認(rèn)識(shí)德绿,而現(xiàn)在越來(lái)越多的開(kāi)發(fā)團(tuán)隊(duì)采用Git作為版本控制工具辕录,當(dāng)然
還有一些公司依舊用著SVN或者其他的版本控制工具,不過(guò)也會(huì)相信慢慢過(guò)渡缓熟,比如開(kāi)發(fā)Android
的兩款主流IDE:Eclipse正在慢慢地被Android Studio替代累魔!寫(xiě)Git系列的教程摔笤,初衷是想
幫助一些剛接觸版本控制,或者想從SVN轉(zhuǎn)到Git上的朋友垦写,能夠快速吕世,系統(tǒng)的掌握Git的使用!
而本節(jié)要講解的內(nèi)容Git的一些概念性的東西梯投!內(nèi)容如下:

  • 1.Git的引入(團(tuán)隊(duì)協(xié)作中版本管理的一點(diǎn)點(diǎn)改進(jìn))
  • 2.Git的四個(gè)組成部分(工作區(qū)命辖,暫存區(qū),本地倉(cāng)庫(kù)分蓖,遠(yuǎn)程倉(cāng)庫(kù))
  • 3.Git中文件的幾個(gè)狀態(tài)
  • 4.Git的下載安裝

以上就是本節(jié)要講解的內(nèi)容概要尔艇!下面我們來(lái)對(duì)一點(diǎn)點(diǎn)的學(xué)習(xí)Git吧!


1.Git的引入

不知道你有沒(méi)有和別人一起開(kāi)發(fā)過(guò)同一個(gè)項(xiàng)目咆疗,沒(méi)有也關(guān)系漓帚,我們舉個(gè)例子來(lái)體驗(yàn)版本控制的變化:
假如開(kāi)發(fā)團(tuán)隊(duì)有小豬,B神午磁,基神三個(gè)Android開(kāi)發(fā)人員尝抖,而我們現(xiàn)在需要一起協(xié)作完成一個(gè)XX的APP,
簡(jiǎn)單的分工后迅皇,我負(fù)責(zé)A模塊昧辽,B神負(fù)責(zé)B模塊,基神負(fù)責(zé)C模塊登颓,分工完后搅荞,我們要面對(duì)的問(wèn)題就是
我們?nèi)绾我黄痖_(kāi)發(fā)這個(gè)項(xiàng)目?我們通過(guò)一個(gè)個(gè)方案暴露的問(wèn)題框咙,一步步引入Git~

方案1:我先做完A模塊咕痛,然后B神再在A模塊的基礎(chǔ)上來(lái)做B模塊,最后再由基神完成C模塊喇嘱。

這樣是可以茉贡,但假如這樣做的話,效率會(huì)很低者铜,很多時(shí)間都花在等待上腔丧,開(kāi)發(fā)周期也會(huì)非常的長(zhǎng),
而且和一個(gè)人完成整個(gè)項(xiàng)目沒(méi)什么區(qū)別作烟,而這種也是大學(xué)做小組形式的課程設(shè)計(jì)的一種合作形式愉粤。

方案2:并行的開(kāi)發(fā),就是自己寫(xiě)自己的拿撩,等三個(gè)人都完成后衣厘,再進(jìn)行整合。

同樣也是可以的压恒,但是等到最后再整合头滔,這個(gè)整合的人是誰(shuí)好怖亭?相信此時(shí)的代碼量會(huì)非常的龐大,
記得小豬以前有一個(gè)XX門(mén)診管理系統(tǒng)的小組課程設(shè)計(jì)坤检,項(xiàng)目很小,邏輯也很簡(jiǎn)單期吓,然而整合卻花了
大概一周的時(shí)間早歇,然后還各種莫名其妙的Bug(最后不了了之)...同樣這也是大學(xué)小組課程設(shè)計(jì)的
另一種合作形式。我們需要想辦法減少代碼的合并難度讨勤,比如每天合并一次大家編寫(xiě)的代碼箭跳,這樣
做還有另一個(gè)好處就是可以清楚的知道每一個(gè)人的當(dāng)天的工作進(jìn)度,于是乎我們衍生出方案3潭千。

方案3(SVN):將工程代碼托管到某個(gè)服務(wù)器上谱姓,每天開(kāi)始工作時(shí),先把服務(wù)器的代碼同步
到本地刨晴,然后再進(jìn)行開(kāi)發(fā)屉来,然后工作結(jié)束后,把代碼提交到服務(wù)器狈癞,此時(shí)可能需要解決沖突
(服務(wù)器上的代碼和本地的代碼有不同的地方)問(wèn)題茄靠,沖突解決后,再次提交代碼蝶桶。

上面的這種方案其實(shí)就是SVN版本控制系統(tǒng)的工作流程慨绳,SVN是一種集中式的版本控制系統(tǒng),
集中式體現(xiàn)在:我們需要一個(gè)中央的服務(wù)器真竖,工作的時(shí)候我們需要先從這個(gè)中央服務(wù)器獲取到
項(xiàng)目當(dāng)前的最新版本脐雪,然后才開(kāi)始干活,做完后恢共,再把自己的修改推送給中央服務(wù)器战秋!
同樣也暴露了一個(gè)明顯的缺點(diǎn)
需要聯(lián)網(wǎng),我們才能夠使用SVN旁振,而且會(huì)受網(wǎng)絡(luò)速度的限制获询,內(nèi)網(wǎng)還可以,外網(wǎng)的話拐袜,
上傳速度可能會(huì)很慢吉嚣。另外還有,依賴于中央服務(wù)器蹬铺,假如某天服務(wù)器宕機(jī)了尝哆,那么誰(shuí)也
無(wú)法提交代碼...
當(dāng)然優(yōu)點(diǎn)也是有的:易于管理,權(quán)限管理機(jī)制甜攀,可以確保安全性秋泄。
現(xiàn)在還有一些公司使用SVN進(jìn)行項(xiàng)目版本管理琐馆,而且大部分大學(xué)開(kāi)設(shè)的課程講解的也是SVN,
關(guān)于SVN的使用不在此講解恒序,有興趣的可自行查閱相關(guān)文獻(xiàn)~

方案4(Git):我們可以將工程托管到服務(wù)器上(比如Github)瘦麸,將它作為遠(yuǎn)程倉(cāng)庫(kù),
我們一般會(huì)在服務(wù)端建立兩個(gè)分支:master分支(保存穩(wěn)定版)歧胁,developer分支(平時(shí)提交的
代碼)滋饲,然后開(kāi)發(fā)人員根據(jù)不同的任務(wù),建立本地分支喊巍,在該分支上進(jìn)行開(kāi)發(fā)屠缭,工作完成后
將代碼push到developer分支上,假如有沖突崭参,則要先解決沖突呵曹,而后還可能需要merge或者
rebase。(PS:關(guān)于分支的內(nèi)容何暮,后面會(huì)細(xì)講奄喂,別急~)

相比起SVN,Git的優(yōu)勢(shì)有以下幾點(diǎn):支持離線提交郭卫,更加強(qiáng)大的分支管理等砍聊;
Git是一個(gè)快速的分布式的版本控制系統(tǒng),和其他的版本控制系統(tǒng)的差別在于Git直接記錄快照贰军,
而不是差異比較玻蝌!差異比較的版本控制系統(tǒng)只關(guān)心文件內(nèi)容的具體差異,然后每次記錄哪些文件做
了更新词疼,以及更新了哪些行的內(nèi)容俯树!當(dāng)我們想切換到以前某個(gè)版本的時(shí)候,我們需要merge贰盗,而
Git在每次commit時(shí)许饿,都會(huì)完整的存儲(chǔ)當(dāng)前版本所有修改的文件,而不是只存儲(chǔ)diff舵盈,
所以想切換都某個(gè)歷史版本只需簡(jiǎn)單的reset即可陋率!

上面我們通過(guò)簡(jiǎn)單的例子引入了Git這個(gè)東東,可能你對(duì)Git還是有點(diǎn)陌生秽晚,有點(diǎn)畏懼瓦糟,沒(méi)事,
我們一步步來(lái)赴蝇,把關(guān)鍵點(diǎn)給掌握了菩浙,就可以解鎖更多姿勢(shì)了~


2.Git的四個(gè)組成部分

我們首先要知道Git由四部分組成,他們分別是:

  • 工作區(qū)——Working Directory
  • 暫存區(qū)——Stage(Index)
  • 本地歷史倉(cāng)庫(kù)——Repository
  • 遠(yuǎn)程倉(cāng)庫(kù)——Remote

下面我們一一來(lái)介紹這四個(gè)部分:

首先是工作區(qū),這個(gè)就不用說(shuō)了劲蜻,我們當(dāng)前的工作空間陆淀;而另外三個(gè)部分,我決定舉一個(gè)
形象化的例子來(lái)幫助大家理解先嬉,網(wǎng)購(gòu)的例子轧苫,比如我們?cè)诠渲池垼?br> ---> 看到了心儀的物品,我們可以把商品添加到購(gòu)物車(chē)(暫存區(qū))疫蔓,我們可能會(huì)頻繁的
添加商品(add)或者移除商品(checkout)浸剩,在這個(gè)過(guò)程中我們可以隨便嗨,反正還沒(méi)
給錢(qián)鳄袍;
---> 接著我們挑的七七八八了,接著我們就要提交我們的訂單了吏恭,點(diǎn)擊提交訂單(commit)拗小,
接著會(huì)生成一個(gè)商品的訂單列表(快照),我們還可以在提交的時(shí)候添加點(diǎn)備注信息樱哼,比如
要什么顏色(commit -m "顏色")哀九,好的,此時(shí)訂單提交了搅幅,但是我們還沒(méi)支付(Push)阅束,
我們可以在自己的賬戶未支付訂單列表(本地倉(cāng)庫(kù))中找到我們的這個(gè)訂單訂單(快照)
也可以看到自己以前的一些訂單記錄茄唐;
---> 再接著我們選擇這個(gè)還沒(méi)付款的訂單息裸,進(jìn)行支付(Push),付款完成后沪编,商家(遠(yuǎn)程倉(cāng)庫(kù))
就會(huì)收到這個(gè)訂單呼盆,然后發(fā)貨...

相信上面的這個(gè)例子對(duì)你理解Git的四個(gè)部分會(huì)有所幫助,回到正題蚁廓,我們簡(jiǎn)單概括下這四個(gè)部分
在日常協(xié)作中是如何發(fā)揮作用的:

工作區(qū)和暫存區(qū)
我們寫(xiě)代碼的地方就是工作區(qū)访圃,代碼寫(xiě)完后,我們可以把他提交到暫存區(qū)相嵌,提交到暫存區(qū)后腿时,我們
可以對(duì)自己的代碼進(jìn)行更改,修改文件內(nèi)容饭宾,刪除或者增加文件批糟,只需一個(gè)git checkout xx即可讓
暫存區(qū)內(nèi)容覆蓋當(dāng)前工作區(qū)的內(nèi)容,或者說(shuō)還原捏雌!

暫存區(qū)和本地倉(cāng)庫(kù)
我們可以把暫存區(qū)的內(nèi)容提交到我們的本地倉(cāng)庫(kù)跃赚,此時(shí)會(huì)在倉(cāng)庫(kù)中生成一個(gè)快照,我們可以為這個(gè)
快照打一個(gè)TAG信息,比如這個(gè)快照叫"完成了UI部分"這樣纬傲,提交后暫存區(qū)中的內(nèi)容就會(huì)被清空满败,
此時(shí)我們可以調(diào)用reset指令,制定某個(gè)快照叹括,然后還原到暫存區(qū)算墨!

工作區(qū)和本地倉(cāng)庫(kù)

我們可以直接走checkout某個(gè)版本的指令,直接讓工作空間還原成某個(gè)本地倉(cāng)庫(kù)中的某個(gè)快照汁雷。

本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)

我們可以將本地的某個(gè)快照push推送到遠(yuǎn)程倉(cāng)庫(kù)净嘀,push時(shí)可能還需處理一些沖突;
也可以從拉取遠(yuǎn)程倉(cāng)庫(kù)到本地侠讯,比如我們經(jīng)常從Github上clone一些開(kāi)源項(xiàng)目~

工作區(qū)和遠(yuǎn)程倉(cāng)庫(kù)

這兩者的協(xié)作一般是pull挖藏,即同步遠(yuǎn)程倉(cāng)庫(kù)的代碼到工作空間而已~

我們把上面的協(xié)作內(nèi)容化成一個(gè)流程圖,可以幫助我們更好的理解:


3.Git中文件的幾個(gè)狀態(tài)

分大類(lèi)的話厢漩,兩種狀態(tài):Tracked(已跟蹤)和Untracked(未跟蹤)膜眠,區(qū)分的依據(jù)是:
該文件是否已經(jīng)加入版本控制?當(dāng)我們?cè)陧?xiàng)目中新增一個(gè)文件溜嗜,這個(gè)文件此時(shí)就處于Untracked狀態(tài)宵膨!
接著我們可以調(diào)用git add指令將該文件加入暫存區(qū),那么此時(shí)該文件此時(shí)處于Tracked狀態(tài)炸宵,又或者說(shuō)
這個(gè)文件已經(jīng)被我們的版本控制系統(tǒng)所跟蹤了辟躏,而且他處于Staged(暫存)狀態(tài)!接著土全,當(dāng)我們把
暫存區(qū)的文件commit后捎琐,此時(shí)該文件處于Unmodified(未修改)狀態(tài);此時(shí)假如我們編輯下該文件涯曲,
文件又會(huì)變成Modified(修改)狀態(tài)野哭,接著git add又處于Staged(暫存)狀態(tài),然后commit...
文件的變化周期流程圖如下

這里這樣說(shuō)幻件,可能你有些不太了解拨黔,沒(méi)事,打開(kāi)Android Studio對(duì)某個(gè)文件做下上述操作绰沥,從文件列表
就可以看到明顯的顏色變化篱蝇,比如Untracked是紅色,git add后變成藍(lán)色徽曲,git commit后變成普通顏色零截,
關(guān)于指令我們下一節(jié)講,你到時(shí)自己留意下就知道了~


4.Git的下載安裝

好了秃臣,關(guān)鍵的概念也就是上面這兩點(diǎn)涧衙,接下來(lái)就是Git的一個(gè)下載安裝了哪工!

安裝完Git后雁比,我們就可以打開(kāi)Git命令行:

Windows在任意位置右鍵,點(diǎn)擊Git Bash打開(kāi)Git命令行
Ubuntu下直接打開(kāi)Terminal就可以撤嫩,Terminal的快捷鍵是:ctrl + alt + t

這里說(shuō)下為什么要使用命令行:
偎捎,裝比必備,啪啪啪敲一堆指令序攘,逼格報(bào)表茴她;
減少跨平臺(tái)使用Git的成本
比如你熟悉了Win下某個(gè)Git的GUI工具,但是加入某一天你要遷移到Linux上程奠,全是命令
行丈牢,你怎么玩...或者需要換另一個(gè)新的GUI工具,你又需要花時(shí)間去熟悉這個(gè)工具的使用瞄沙。
當(dāng)然還是看自己吧赡麦,也沒(méi)一定要命令行,你也可以用圖形化工具帕识,比如后面也會(huì)講下在
Android Studio上使用Git!


5.Git的官方文檔:


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遂铡,一起剝皮案震驚了整個(gè)濱河市肮疗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扒接,老刑警劉巖伪货,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钾怔,居然都是意外死亡碱呼,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)宗侦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)愚臀,“玉大人,你說(shuō)我怎么就攤上這事矾利」昧眩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵男旗,是天一觀的道長(zhǎng)舶斧。 經(jīng)常有香客問(wèn)我,道長(zhǎng)察皇,這世上最難降的妖魔是什么茴厉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上矾缓,老公的妹妹穿的比我還像新娘怀酷。我一直安慰自己,他們只是感情好而账,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布胰坟。 她就那樣靜靜地躺著,像睡著了一般泞辐。 火紅的嫁衣襯著肌膚如雪笔横。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天咐吼,我揣著相機(jī)與錄音吹缔,去河邊找鬼。 笑死锯茄,一個(gè)胖子當(dāng)著我的面吹牛厢塘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肌幽,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晚碾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了喂急?” 一聲冷哼從身側(cè)響起格嘁,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎廊移,沒(méi)想到半個(gè)月后糕簿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狡孔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年懂诗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苗膝。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡殃恒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辱揭,到底是詐尸還是另有隱情芋类,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布界阁,位于F島的核電站侯繁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏泡躯。R本人自食惡果不足惜贮竟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一丽焊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咕别,春花似錦技健、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至偿短,卻和暖如春欣孤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昔逗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工降传, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勾怒。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓婆排,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親笔链。 傳聞我的和親對(duì)象是個(gè)殘疾皇子段只,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,663評(píng)論 4 54
  • 那匆匆溜走的時(shí)光 改變了您美好的年齡 那把毫不留情的殺豬刀 偷走了您年輕的模樣 也是那明顯的變化 讓我知道了您的用...
    初念吖_L閱讀 180評(píng)論 0 2
  • 本人剛剛進(jìn)入大學(xué)鉴扫,卻已是把逃課翼悴,上課玩手機(jī)變成了家常便飯,把游戲中的每日任務(wù)當(dāng)成了光榮使命幔妨。像毛筆,陶笛這類(lèi)在憧憬...
    清風(fēng)與人行閱讀 323評(píng)論 2 4
  • 今天去城關(guān)排了一天的隊(duì)谍椅,有點(diǎn)累误堡,早早就睡著了,肚子里的小家伙不配合雏吭,檢查了幾次都沒(méi)檢查到锁施,幸虧最后一次可以,不然明...
    FAB丶花零閱讀 124評(píng)論 0 0