1.0 學(xué)習(xí)目標(biāo)
-
了解Git基本概念
-
能夠概述git工作流程
-
能夠使用Git常用命令
-
熟悉Git代碼托管服務(wù)
-
能夠使用 Visual Studio/Rider/VSCode 操作git
1.1 需要的知識(shí)儲(chǔ)備
-
linux 基本命令
-
編程入門基礎(chǔ)
-
簡(jiǎn)單的docker 基礎(chǔ)(會(huì)安裝容器即可)
1.2 適合學(xué)習(xí)人群
-
在校大學(xué)生
-
初入社會(huì)的開發(fā)人員
?文章來源:http://www.zghlxwxcb.cn/news/detail-762218.html
?
2.1、為什么需要代碼版本控制工具
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)(沒有之一)。
Git有什么特點(diǎn)?簡(jiǎn)單來說就是:高端大氣上檔次!
那什么是版本控制系統(tǒng)?
如果你用Microsoft Word寫過長(zhǎng)篇大論,那你一定有這樣的經(jīng)歷:
想刪除一個(gè)段落,又怕將來想恢復(fù)找不回來怎么辦?有辦法,先把當(dāng)前文件“另存為……”一個(gè)新的Word文件,再接著改,改到一定程度,再“另存為……”一個(gè)新文件,這樣一直改下去,最后你的Word文檔變成了這樣:
?
過了一周,你想找回被刪除的文字,但是已經(jīng)記不清刪除前保存在哪個(gè)文件里了,只好一個(gè)一個(gè)文件去找,真麻煩。
看著一堆亂七八糟的文件,想保留最新的一個(gè),然后把其他的刪掉,又怕哪天會(huì)用上,還不敢刪,真郁悶。
更要命的是,有些部分需要你的財(cái)務(wù)同事幫助填寫,于是你把文件Copy到U盤里給她(也可能通過Email發(fā)送一份給她),然后,你繼續(xù)修改Word文件。一天后,同事再把Word文件傳給你,此時(shí),你必須想想,發(fā)給她之后到你收到她的文件期間,你作了哪些改動(dòng),得把你的改動(dòng)和她的部分合并,真困難。
于是你想,如果有一個(gè)軟件,不但能自動(dòng)幫我記錄每次文件的改動(dòng),還可以讓同事協(xié)作編輯,這樣就不用自己管理一堆類似的文件了,也不需要把文件傳來傳去。如果想查看某次改動(dòng),只需要在軟件里瞄一眼就可以,豈不是很方便?
這個(gè)軟件用起來就應(yīng)該像這個(gè)樣子,能記錄每次文件的改動(dòng):
版本 | 文件名 | 用戶 | 說明 | 日期 |
---|---|---|---|---|
1 | service.doc | 張三 | 刪除了軟件服務(wù)條款5 | 7/12 10:38 |
2 | service.doc | 張三 | 增加了License人數(shù)限制 | 7/12 18:09 |
3 | service.doc | 李四 | 財(cái)務(wù)部門調(diào)整了合同金額 | 7/13 9:51 |
4 | service.doc | 張三 | 延長(zhǎng)了免費(fèi)升級(jí)周期 | 7/14 15:17 |
這樣,你就結(jié)束了手動(dòng)管理多個(gè)“版本”的史前時(shí)代,進(jìn)入到版本控制的20世紀(jì)。
2.2、代碼版本控制系統(tǒng)分類
常見的代碼版本控制系統(tǒng)包括以下幾種:
-
Git:現(xiàn)在應(yīng)用最為廣泛的分布式版本控制系統(tǒng),使用廣泛,由于分布式的特點(diǎn),支持本地化開發(fā)和離線工作。
-
SVN:集中式版本控制系統(tǒng),與 Git 相比,不支持本地化開發(fā),但故障恢復(fù)速度較快,可以像 Git 一樣實(shí)現(xiàn)版本回退。
-
Mercurial:又稱 hg,也是分布式版本控制系統(tǒng),和 Git 功能類似。
-
TFS:微軟提供的團(tuán)隊(duì)協(xié)作平臺(tái),具有源代碼管理、工作管理、自動(dòng)化構(gòu)建、測(cè)試管理等功能。
-
Perforce:支持分布式和集中式版本控制的商業(yè)軟件,主要針對(duì)需要大規(guī)模協(xié)作的企業(yè)級(jí)團(tuán)隊(duì)。
-
CVS:集中式版本控制系統(tǒng),近些年來已經(jīng)逐漸淘汰,但在早期很常用,例如在 Linux 內(nèi)核早期就是使用 CVS 進(jìn)行版本控制。
?
集中式VS分布式
Linus(linux 系統(tǒng)創(chuàng)始人)一直痛恨的CVS及SVN都是集中式的版本控制系統(tǒng),而Git是分布式版本控制系統(tǒng),集中式和分布式版本控制系統(tǒng)有什么區(qū)別呢?
先說集中式版本控制系統(tǒng),版本庫(kù)是集中存放在中央服務(wù)器的,而干活的時(shí)候,用的都是自己的電腦,所以要先從中央服務(wù)器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務(wù)器。中央服務(wù)器就好比是一個(gè)圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館。
?
集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作,如果在局域網(wǎng)內(nèi)還好,帶寬夠大,速度夠快,可如果在互聯(lián)網(wǎng)上,遇到網(wǎng)速慢的話,可能提交一個(gè)10M的文件就需要5分鐘,這還不得把人給憋死啊。
那分布式版本控制系統(tǒng)與集中式版本控制系統(tǒng)有何不同呢?首先,分布式版本控制系統(tǒng)根本沒有“中央服務(wù)器”,每個(gè)人的電腦上都是一個(gè)完整的版本庫(kù),這樣,你工作的時(shí)候,就不需要聯(lián)網(wǎng)了,因?yàn)榘姹編?kù)就在你自己的電腦上。既然每個(gè)人電腦上都有一個(gè)完整的版本庫(kù),那多個(gè)人如何協(xié)作呢?比方說你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時(shí),你們倆之間只需把各自的修改推送給對(duì)方,就可以互相看到對(duì)方的修改了。
和集中式版本控制系統(tǒng)相比,分布式版本控制系統(tǒng)的安全性要高很多,因?yàn)槊總€(gè)人電腦里都有完整的版本庫(kù),某一個(gè)人的電腦壞掉了不要緊,隨便從其他人那里復(fù)制一個(gè)就可以了。而集中式版本控制系統(tǒng)的中央服務(wù)器要是出了問題,所有人都沒法干活了。
在實(shí)際使用分布式版本控制系統(tǒng)的時(shí)候,其實(shí)很少在兩人之間的電腦上推送版本庫(kù)的修改,因?yàn)榭赡苣銈儌z不在一個(gè)局域網(wǎng)內(nèi),兩臺(tái)電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機(jī)。因此,分布式版本控制系統(tǒng)通常也有一臺(tái)充當(dāng)“中央服務(wù)器”的電腦,但這個(gè)服務(wù)器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已。
?
當(dāng)然,Git的優(yōu)勢(shì)不單是不必聯(lián)網(wǎng)這么簡(jiǎn)單,后面我們還會(huì)看到Git極其強(qiáng)大的分支管理,把SVN等遠(yuǎn)遠(yuǎn)拋在了后面。
CVS作為最早的開源而且免費(fèi)的集中式版本控制系統(tǒng),直到現(xiàn)在還有不少人在用。由于CVS自身設(shè)計(jì)的問題,會(huì)造成提交文件不完整,版本庫(kù)莫名其妙損壞的情況。同樣是開源而且免費(fèi)的SVN修正了CVS的一些穩(wěn)定性問題,是目前用得最多的集中式版本庫(kù)控制系統(tǒng)。
除了免費(fèi)的外,還有收費(fèi)的集中式版本控制系統(tǒng),比如IBM的ClearCase(以前是Rational公司的,被IBM收購(gòu)了),特點(diǎn)是安裝比Windows還大,運(yùn)行比蝸牛還慢,能用ClearCase的一般是世界500強(qiáng),他們有個(gè)共同的特點(diǎn)是財(cái)大氣粗,或者人傻錢多。
微軟自己也有一個(gè)集中式版本控制系統(tǒng)叫VSS,集成在Visual Studio中。由于其反人類的設(shè)計(jì),連微軟自己都不好意思用了。
分布式版本控制系統(tǒng)除了Git以及促使Git誕生的BitKeeper外,還有類似Git的Mercurial和Bazaar等。這些分布式版本控制系統(tǒng)各有特點(diǎn),但最快、最簡(jiǎn)單也最流行的依然是Git!
?
2.3、Git的誕生
很多人都知道,Linus在1991年創(chuàng)建了開源的Linux,從此,Linux系統(tǒng)不斷發(fā)展,已經(jīng)成為最大的服務(wù)器系統(tǒng)軟件了。
Linus雖然創(chuàng)建了Linux,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為L(zhǎng)inux編寫代碼,那Linux的代碼是如何管理的呢?
事實(shí)是,在2002年以前,世界各地的志愿者把源代碼文件通過diff的方式發(fā)給Linus,然后由Linus本人通過手工方式合并代碼!
你也許會(huì)想,為什么Linus不把Linux代碼放到版本控制系統(tǒng)里呢?不是有CVS、SVN這些免費(fèi)的版本控制系統(tǒng)嗎?因?yàn)長(zhǎng)inus堅(jiān)定地反對(duì)CVS和SVN,這些集中式的版本控制系統(tǒng)不但速度慢,而且必須聯(lián)網(wǎng)才能使用。有一些商用的版本控制系統(tǒng),雖然比CVS、SVN好用,但那是付費(fèi)的,和Linux的開源精神不符。
不過,到了2002年,Linux系統(tǒng)已經(jīng)發(fā)展了十年了,代碼庫(kù)之大讓Linus很難繼續(xù)通過手工方式管理了,社區(qū)的弟兄們也對(duì)這種方式表達(dá)了強(qiáng)烈不滿,于是Linus選擇了一個(gè)商業(yè)的版本控制系統(tǒng)BitKeeper,BitKeeper的東家BitMover公司出于人道主義精神,授權(quán)Linux社區(qū)免費(fèi)使用這個(gè)版本控制系統(tǒng)。
安定團(tuán)結(jié)的大好局面在2005年就被打破了,原因是Linux社區(qū)牛人聚集,不免沾染了一些梁山好漢的江湖習(xí)氣。開發(fā)Samba的Andrew試圖破解BitKeeper的協(xié)議(這么干的其實(shí)也不只他一個(gè)),被BitMover公司發(fā)現(xiàn)了(監(jiān)控工作做得不錯(cuò)?。?,于是BitMover公司怒了,要收回Linux社區(qū)的免費(fèi)使用權(quán)。
Linus可以向BitMover公司道個(gè)歉,保證以后嚴(yán)格管教弟兄們,嗯,這是不可能的。實(shí)際情況是這樣的:
Linus花了兩周時(shí)間自己用C寫了一個(gè)分布式版本控制系統(tǒng),這就是Git!一個(gè)月之內(nèi),Linux系統(tǒng)的源碼已經(jīng)由Git管理了!牛是怎么定義的呢?大家可以體會(huì)一下。
Git迅速成為最流行的分布式版本控制系統(tǒng),尤其是2008年,GitHub網(wǎng)站上線了,它為開源項(xiàng)目免費(fèi)提供Git存儲(chǔ),無數(shù)開源項(xiàng)目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。
歷史就是這么偶然,如果不是當(dāng)年BitMover公司威脅Linux社區(qū),可能現(xiàn)在我們就沒有免費(fèi)而超級(jí)好用的Git了。
?
2.4、GIT的優(yōu)勢(shì)
-
歷史變更跟蹤 - 您可以查看提交如何隨時(shí)間變化的圖形,了解誰在何時(shí)進(jìn)行了哪些更改,并可根據(jù)需要恢復(fù)到之前的提交。借助歷史記錄功能,您可以更輕松地識(shí)別和修復(fù)錯(cuò)誤。
-
團(tuán)隊(duì)協(xié)作 - 在提交或合并回主作業(yè)分支前,您可以輕松地與團(tuán)隊(duì)成員共享代碼,開展評(píng)審工作。此外,分支和評(píng)審功能有助于實(shí)現(xiàn)同步開發(fā)。多人可在同一文件上作業(yè),稍后再解決分歧。
-
提高團(tuán)隊(duì)開發(fā)速度和生產(chǎn)效率 - 團(tuán)隊(duì)可以利用 Git 輕松跟蹤代碼更改?,F(xiàn)在,您可以專注于編寫代碼,而不是花時(shí)間跟蹤和合并團(tuán)隊(duì)中的不同版本。此外,Git 可執(zhí)行計(jì)算并在本地存儲(chǔ)您的主存儲(chǔ)庫(kù),這使其大多數(shù)操作都快于集中式 VCS。
-
可用性和冗余性 - Git 是一種分布式 VCS,也就是說,它沒有集中存儲(chǔ)一切內(nèi)容的單一中央位置。在分布式系統(tǒng)中,如果您需要備份,則有多個(gè)備份。這讓您能夠離線作業(yè),并在完成作業(yè)后提交更改。
-
Git 是一種行業(yè)標(biāo)準(zhǔn) - 由于廣受歡迎,Git 得到了許多集成開發(fā)環(huán)境 (IDE) 和許多流行開發(fā)人員工具的支持,包括
?
?
2.5、工作中GIT使用步驟
?
命令如下:
-
clone(克?。? 從遠(yuǎn)程倉(cāng)庫(kù)中克隆代碼到本地倉(cāng)庫(kù)
-
checkout (檢出):從本地倉(cāng)庫(kù)中檢出一個(gè)倉(cāng)庫(kù)分支然后進(jìn)行修訂
-
add(添加): 在提交前先將代碼提交到暫存區(qū)
-
commit(提交): 提交到本地倉(cāng)庫(kù)。本地倉(cāng)庫(kù)中保存修改的各個(gè)歷史版本
-
fetch (抓取) : 從遠(yuǎn)程庫(kù),抓取到本地倉(cāng)庫(kù),不進(jìn)行任何的合并動(dòng)作,一般操作比較少。
-
pull (拉取) : 從遠(yuǎn)程庫(kù)拉到本地庫(kù),自動(dòng)進(jìn)行合并(merge),然后放到到工作區(qū),相當(dāng)于 fetch+merge
-
push(推送) : 修改完成后,需要和團(tuán)隊(duì)成員共享代碼時(shí),將代碼推送到遠(yuǎn)程倉(cāng)庫(kù)
?
視頻配套鏈接:GitLab的cicd自動(dòng)發(fā)布構(gòu)建流程 - 網(wǎng)易云課堂 (163.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-762218.html
到了這里,關(guān)于1、前言 2、概述的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!