寫(xiě)在前面
上篇文章我?guī)е蠹彝ㄟ^(guò)分析了一遍ASP.NET Core的源碼了解了它的啟動(dòng)過(guò)程,然后又帶著大家熟悉了一遍配置文件的加載方式,最后引出了依賴(lài)注入以及控制反轉(zhuǎn)的概念!如果大家把前面幾張都理解了,那么你也就入了ASP.NET Core的大門(mén)了。但是我們還需要一個(gè)版本控制工具來(lái)提高我們的編碼效率。因此這篇文章我將帶著大家了解下Git這個(gè)版本控制工具以及為什么選擇它。
下面我們將通過(guò)故事的形式從Git的歷史談起,并講述Git的強(qiáng)大之處。然后通過(guò)實(shí)戰(zhàn)演練教你如何在Github以及碼云上托管我們的代碼并進(jìn)行代碼的版本控制。
Git快速入門(mén)
本部分我會(huì)先通過(guò)故事的形式講解下Git的誕生,及其強(qiáng)大的分布式版本控制的能力。然后再給大家介紹一下我們?cè)趯?shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中經(jīng)常用到的git命令,讓大家能夠快速入門(mén)Git。當(dāng)然我不會(huì)給你介紹八百年也不會(huì)用一次的命令,感覺(jué)很高級(jí)的命令,畢竟實(shí)用才是硬道理。還有不要指望通過(guò)這篇文章你就能成為Git專(zhuān)家,這篇文章只會(huì)讓你在實(shí)際項(xiàng)目中能夠迎刃有余的使用Git
關(guān)于Git你不得不知的故事
(沒(méi)錯(cuò),這部分參考自廖雪峰大神的文章,因?yàn)橛斜匾尨蠡锪私膺@些)很多人都知道,Linus在1991年創(chuàng)建了開(kāi)源的Linux,從此,Linux系統(tǒng)不斷發(fā)展,已經(jīng)成為最大的服務(wù)器系統(tǒng)軟件了。
Linus雖然創(chuàng)建了Linux,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為L(zhǎng)inux編寫(xiě)代碼,那Linux的代碼是如何管理的呢?
事實(shí)是,在2002年以前,世界各地的志愿者把源代碼文件通過(guò)diff的方式發(fā)給Linus,然后由Linus本人通過(guò)手工方式合并代碼!
你也許會(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的開(kāi)源精神不符。
不過(guò),到了2002年,Linux系統(tǒng)已經(jīng)發(fā)展了十年了,代碼庫(kù)之大讓Linus很難繼續(xù)通過(guò)手工方式管理了,社區(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í)氣。開(kāi)發(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寫(xiě)了一個(gè)分布式版本控制系統(tǒng),這就是Git!一個(gè)月之內(nèi),Linux系統(tǒng)的源碼已經(jīng)由Git管理了!牛是怎么定義的呢?大家可以體會(huì)一下。
Git迅速成為最流行的分布式版本控制系統(tǒng),尤其是2008年,GitHub網(wǎng)站上線了,它為開(kāi)源項(xiàng)目免費(fèi)提供Git存儲(chǔ),無(wú)數(shù)開(kāi)源項(xiàng)目開(kāi)始遷移至GitHub,包括jQuery,PHP,Ruby等等。如今GitHub更是被微軟收購(gòu),ASP.NET Core的的全套源碼以及.NET Core的源碼也都是在GitHub上開(kāi)源。
歷史就是這么偶然,如果不是當(dāng)年BitMover公司威脅Linux社區(qū),可能現(xiàn)在我們就沒(méi)有免費(fèi)而超級(jí)好用的Git了。
Git的優(yōu)勢(shì)
看了Git的的故事是不是心潮澎湃呢?但是你又在想了Git到底有什么優(yōu)勢(shì)能夠讓那么多的大名鼎鼎的項(xiàng)目都是用Git進(jìn)行代碼管理呢?別急,這部分就為你解答。
- 適合分布式開(kāi)發(fā),強(qiáng)調(diào)個(gè)體,可以離線工作。 分布式版本控制系統(tǒng)根本沒(méi)有“中央服務(wù)器”,每個(gè)人的電腦上都是一個(gè)完整的版本庫(kù),這樣,你工作的時(shí)候,就不需要聯(lián)網(wǎng)了,因?yàn)榘姹編?kù)就在你自己的電腦上。既然每個(gè)人電腦上都有一個(gè)完整的版本庫(kù),那多個(gè)人如何協(xié)作呢?比方說(shuō)你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時(shí),你們倆之間只需把各自的修改推送給對(duì)方,就可以互相看到對(duì)方的修改了。
- 安全性要高很多,因?yàn)槊總€(gè)人電腦里都有完整的版本庫(kù),某一個(gè)人的電腦壞掉了不要緊,隨便從其他人那里復(fù)制一個(gè)就可以了。而集中式版本控制系統(tǒng)的中央服務(wù)器要是出了問(wèn)題,所有人都沒(méi)法干活了。因此公共服務(wù)器壓力和數(shù)據(jù)量都不會(huì)太大。
- 速度快、靈活。 強(qiáng)大的分支管理能力,無(wú)論創(chuàng)建、切換和刪除分支,Git在1秒鐘之內(nèi)就能完成!無(wú)論你的版本庫(kù)是1個(gè)文件還是1萬(wàn)個(gè)文件,想想svn是不是頭疼啊。
- 暫存區(qū)概念。
這個(gè)優(yōu)缺點(diǎn)Git的優(yōu)勢(shì)想的頭疼,說(shuō)太多就感覺(jué)枯燥了,只有你真正使用了才能體會(huì)到!話不多說(shuō),讓我們快速入門(mén)Git吧。
Git安裝
你可以點(diǎn)擊這里 到官網(wǎng)進(jìn)行下載,可能官網(wǎng)下載比較忙,所以你可以點(diǎn)擊這里 到服務(wù)器之家進(jìn)行下載.
Windows系統(tǒng)的安裝很簡(jiǎn)單,軟件下載好之后一步一步的安裝就行了,至于Linux和MacOS你可以點(diǎn)這里 查看官網(wǎng)的安裝教程.
安裝完成之后,需要進(jìn)行相關(guān)的配置,在命令行輸入以下命令進(jìn)行全局的配置:
1
2
|
$ git config --global user.name "yilezhu" $ git config --global user.email <a href= "mailto:1015657114@qq.com" rel= "external nofollow" >1015657114@qq.com</a> |
注:因?yàn)镚it是分布式版本控制系統(tǒng),所以,每臺(tái)機(jī)器都必須自報(bào)家門(mén):你的名字和Email地址(上面雙引號(hào)里面的內(nèi)容)。你也許會(huì)擔(dān)心,如果有人故意冒充別人怎么辦?這個(gè)不必?fù)?dān)心,首先我們相信大家都是善良無(wú)知的群眾,其次,真的有冒充的也是有辦法可查的。
注意
git config
命令的--global
參數(shù),用了這個(gè)參數(shù),表示你這臺(tái)機(jī)器上所有的Git倉(cāng)庫(kù)都會(huì)使用這個(gè)配置,當(dāng)然也可以對(duì)某個(gè)倉(cāng)庫(kù)指定不同的用戶名和Email地址。
點(diǎn)擊這里 ,下載并安裝TortoiseGit圖形化工具,安裝后可以通過(guò)鼠標(biāo)進(jìn)行Git命令的操作。如下所示:
Git結(jié)合Github進(jìn)行實(shí)戰(zhàn)演練
Git本地倉(cāng)庫(kù)與GitHub遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián)并獲取最新的代碼
這部分我們就進(jìn)行Git的實(shí)戰(zhàn)吧,正好前面幾篇文章已經(jīng)為大家演示了幾個(gè)例子,那么我們就把前面幾個(gè)例子為例,使用Git把他們托管到GitHub上面吧。
1.假設(shè)你已經(jīng)有了GitHub賬號(hào),沒(méi)有的話自己去注冊(cè)。點(diǎn)擊這里 登錄GitHub,
2.自報(bào)家門(mén),配置你是誰(shuí)(如果你在上面的Git安裝)里面已經(jīng)按照下面進(jìn)行了配置,這里就無(wú)需再配置。首先鼠標(biāo)右鍵按照下圖所示打開(kāi)Git Bash 然后按照下圖所示進(jìn)行配置:
3.生成ssh key 在git bash上面輸入ssh-keygen -t rsa -C "你的郵箱"
它會(huì)有三次等待你輸入,直接回車(chē)即可。下面的圖是因?yàn)槲乙呀?jīng)生成了,詢(xún)問(wèn)我是否覆蓋,我輸入y選擇了是重新生成了。
4.將生成的ssh key拷貝到剪貼板,執(zhí)行 clip < ~/.ssh/id_rsa.pub
(或者到上圖提示的路徑里去打開(kāi)文件并復(fù)制):
5.打開(kāi)github并按照如下圖所示打開(kāi)Settings
6.點(diǎn)擊左邊的SSH and GPG keys
然后在右邊點(diǎn)擊 New SSH key
將ssh key粘貼到右邊的Key里面。Title隨便命名即可。這時(shí)候GitHub會(huì)給你發(fā)送一封郵件
7.執(zhí)行 ssh -T git@github.com
測(cè)試結(jié)果如下說(shuō)明GitHub配置成功。
8.GitHub上創(chuàng)建一個(gè)新的項(xiàng)目,項(xiàng)目名稱(chēng)為Czar.Cms
,這個(gè)倉(cāng)庫(kù)將作為我們后面CMS系統(tǒng)的GitHub上的遠(yuǎn)程倉(cāng)庫(kù)
•首先是在右上角“+”進(jìn)入創(chuàng)建界面
•接著按照如下所示輸入項(xiàng)目名稱(chēng),然后點(diǎn)擊Create repository
就創(chuàng)建好了。
這里我們有選擇以Readme初始化項(xiàng)目。所以生成后的結(jié)構(gòu)如下所示:
9.下面我們就在本地初始化一個(gè)倉(cāng)庫(kù),然后與GitHub的遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián)起來(lái)吧。
10.我們?cè)谖覀兊墓ぷ魑募A中,打開(kāi)Git Bash,然后輸入如下命令git init
來(lái)初始化一個(gè)本地倉(cāng)庫(kù)。
11.然后輸入git remote
查看下遠(yuǎn)程倉(cāng)庫(kù),正常的話應(yīng)該有0個(gè),現(xiàn)在就讓我們添加下我們剛才建立的GitHub上的遠(yuǎn)程倉(cāng)庫(kù)吧.然后再看下遠(yuǎn)程倉(cāng)庫(kù)列表,發(fā)現(xiàn)已經(jīng)有一個(gè)了,名字為github
注:要添加一個(gè)新的遠(yuǎn)程倉(cāng)庫(kù),可以指定一個(gè)簡(jiǎn)單的名字,以便將來(lái)引用,運(yùn)行 git remote add [shortname] [url] 。上面我們對(duì)應(yīng)的shortname即為github,這個(gè)你可以隨意指定只要好記就行。感謝@寶寶董 給與的提示!
git remote add github github遠(yuǎn)程倉(cāng)庫(kù)的地址
12.然后輸入git pull github master
就會(huì)從剛才我們配置的遠(yuǎn)程倉(cāng)庫(kù)拉取master分支的代碼。如下所示:
13.獲取之后然后看下我么的項(xiàng)目文件夾,如下所示:已經(jīng)從GitHub上獲取到了最新的代碼:
把上篇文章的源碼上傳到GitHub的Sample02分支上
1.在我們的本地倉(cāng)庫(kù)文件夾打開(kāi)git bash 然后輸入git checkout -b Sample02
命令創(chuàng)建并切換到Sample02
這個(gè)分支,然后把我們上篇文章的代碼拷貝到這個(gè)文件夾,如下圖所示
2.輸入git status
查看當(dāng)前倉(cāng)庫(kù)有哪些文件做了修改,如下圖所示,紅色部分表示已經(jīng)發(fā)生了修改
3.輸入git add Sample02/
把Sample02文件夾下面所有的已經(jīng)發(fā)生了修改的文件都放進(jìn)'暫存區(qū)' 然后輸入git status
查看一下當(dāng)前的狀態(tài),都變成了綠色,說(shuō)明Sample02文件夾下面的修改內(nèi)容都加入了暫存區(qū)
4.接著輸入git commit -m '注釋內(nèi)容'
命令把我們暫存區(qū)的代碼提交到我們的本地倉(cāng)庫(kù)
5.然后輸入git status
查看一下,發(fā)現(xiàn)所有的修改都已經(jīng)提交成功了。
6.輸入如下命令git push github Sample02
把我們的本地代碼提交到遠(yuǎn)程倉(cāng)庫(kù)的'Sample02分支'吧
注意,這里時(shí)提交到Github上的Sample02分支上,而我們的GitHub上沒(méi)有這個(gè)分支,所以會(huì)自動(dòng)幫我們創(chuàng)建這個(gè)分支。
7.這里第三篇的事例代碼就上傳到Github上了。大家可以去查看下,順便給個(gè)Star哦,因?yàn)楹竺娴腃MS的代碼我也會(huì)放到這個(gè)倉(cāng)庫(kù),只不過(guò)是不同的分支而已。
下面就讓我們切換回master分支,并結(jié)束這個(gè)部分吧。輸入git checkout master
GitHub源碼地址
這個(gè)時(shí)候可以上GitHub的地址了,后面所有的事例代碼都會(huì)放到這個(gè)分支上。
總結(jié)
本文從Git的誕生開(kāi)始說(shuō)起,然后給大家講了Git的優(yōu)勢(shì)。接著我們通過(guò)一個(gè)GitHub的實(shí)戰(zhàn),手把手的在GitHub上新建了一個(gè)遠(yuǎn)程倉(cāng)庫(kù)并跟我本地的代碼進(jìn)行管理,并且把我的上篇文章的事例代碼給上傳到了GitHub上。希望對(duì)大家使用Git有所幫助。下面再次羅列常用的Git命令
- git init :初始化本地倉(cāng)庫(kù)
- git remote :查看關(guān)聯(lián)的遠(yuǎn)程倉(cāng)庫(kù)連接
- git remote add github github遠(yuǎn)程倉(cāng)庫(kù)地址 :創(chuàng)建一個(gè)遠(yuǎn)程倉(cāng)庫(kù)連接
- git pull github master :從github命名的遠(yuǎn)程倉(cāng)庫(kù)拉取master分支內(nèi)容
- git checkout -b Sample02 :創(chuàng)建并切換到Sample02這個(gè)分支上
- git branch :查看當(dāng)前的所有分支
- git add Sample02/ :把Sample02文件夾下面的所有修改文件添加到暫存區(qū)
- git commit -m "注釋" :把暫存區(qū)所有修改提交到本地倉(cāng)庫(kù),并給本體提交寫(xiě)一個(gè)注釋方便查看日志
- git log --graph :查看修改日志
- git push github Sample02 :把當(dāng)前倉(cāng)庫(kù)中得當(dāng)前分支的內(nèi)容推送到github這個(gè)遠(yuǎn)程倉(cāng)庫(kù)的Sample02分支上,如果分支不存在則自動(dòng)創(chuàng)建
-
git merge --no-ff -m "注釋" Sample02 :在當(dāng)前分支合并
Sample02
這個(gè)分支的修改到當(dāng)前分支,并給這次合并添加注釋
好了,今天就給大家介紹到這,主要是給大家介紹平時(shí)實(shí)際項(xiàng)目中常用的命令,對(duì)于不常用的命令沒(méi)有介紹,因?yàn)楫吘故菍?shí)戰(zhàn),所以以實(shí)用為主。下篇文章我會(huì)給大家介紹一下Dapper的使用(玩數(shù)據(jù)庫(kù)了)來(lái)為后面我們的CMS系列課程打下基礎(chǔ),畢竟要照顧一些新手朋友。
原文鏈接:https://www.cnblogs.com/yilezhu/p/10014027.html