結(jié)合設(shè)計(jì)經(jīng)驗(yàn)與營(yíng)銷實(shí)踐,提供有價(jià)值的互聯(lián)網(wǎng)資訊
發(fā)布日期:2019-10-13瀏覽次數(shù):1559 來(lái)源:福州網(wǎng)站建設(shè)
Git如日中天的今天,不懂git都不好意思跟人說(shuō)自己是程序猿。你是不是早就躍躍欲試了,只是苦于沒(méi)有借口(契機(jī))。 好吧,機(jī)會(huì)就在今天。 給我20分鐘,是的,只要20分鐘, 讓你快速用上git。
我們廢話不多說(shuō),直接來(lái)干貨。
我們將會(huì)介紹以下幾點(diǎn):
一, 什么是git
二,使用git的一般開發(fā)流程
三,快速安裝新建項(xiàng)目。holloworld。
開始:
一,什么是git。
閱讀本文的前提是你知道或者用過(guò)至少一種源代碼管理工具,比如:SVN, CVS 或者TFS等等。 你必須知道什么是源代碼管理。如果這些都不滿足。請(qǐng)直接跳過(guò)本文。
了解陌生事物的最好辦法,是和已知事物類比。 ---孔子
我們以svn為例。 我們都知道傳統(tǒng)的源代碼管理都是以服務(wù)器為中心的:
每個(gè)開發(fā)者都直接連在中間服務(wù)器上, 本地修改,然后commit到svn服務(wù)器上。
這種做法看似完美,但是有致命的缺陷:
1. 開發(fā)者不能本地跟蹤代碼版本。 所有的信息都是在服務(wù)器上。 你把本地的代碼改了很多,但是又不能提交。通常,本地只能緩存一個(gè)版本。對(duì)于小項(xiàng)目無(wú)所謂, 但是項(xiàng)目一復(fù)雜,人員多就麻煩了。 通常你本地的代碼都全是紅色的。自己都不知道今天修改了什么, 有哪些修改是真正應(yīng)該提交給svn的。
2. 因?yàn)榈谝稽c(diǎn),一旦離開服務(wù)器, 程序猿將無(wú)法正常工作。 因?yàn)楸镜夭荒芨櫞a版本。 你的(幾乎)任何操作都必須連上服務(wù)器。比如, show log, blame,show history等等。
3. 中央服務(wù)器壓力過(guò)大。 因?yàn)槊總€(gè)人都必須把代碼提交到服務(wù)器,并且做daily build。
4. 對(duì)于大型項(xiàng)目, svn幾乎不可用。 例如linux內(nèi)核項(xiàng)目, 開發(fā)者何止幾萬(wàn)? 都直接提交給svn服務(wù)器的話還不亂套了。
5. 對(duì)于個(gè)人的私人項(xiàng)目而言(或者對(duì)于小公司的項(xiàng)目), 不用版本控制當(dāng)然不行,但是為了用版本控制而專門架設(shè)svn服務(wù)器有有點(diǎn)舍不得。
有沒(méi)有能解決上述幾個(gè)問(wèn)題的東東呢? 恩, 答案是肯定的。
Linux內(nèi)核的作者也遇到了這些問(wèn)題,于是他決定再一次改變世界, 重寫一個(gè)可以本地使用的svn。
對(duì), 這就是git。 分布式代碼版本管理系統(tǒng)。(說(shuō)人話 :就是不用服務(wù)器的svn)
我們來(lái)看git的結(jié)構(gòu):
git沒(méi)有中央服務(wù)器。 你裝上git軟件之后,你就可以指定本地的文件夾進(jìn)行版本控制了。你可拔掉網(wǎng)線,然后在本地修改, commit,revert(rollback), branch, restore, show log, blame, history 等等, 全部你之前在svn里面可以用的操作。 簡(jiǎn)單的說(shuō),你就完美了。
你可能意識(shí)到一個(gè)問(wèn)題了。 就是天下大亂了。
每個(gè)人都自顧自的開發(fā),怎么協(xié)作呢? 恩,通常git比svn會(huì)多出兩個(gè)操作, 就是 pull 和push。
我們看一個(gè)復(fù)雜一點(diǎn)的圖:
開發(fā)者之間通過(guò) pull和push操作, 把別人的修改拉過(guò)來(lái),或者把自己的修改推給別人。
恩,你可能還是覺得有問(wèn)題,我們生產(chǎn) 環(huán)境中, 以誰(shuí)的代碼為最終版本呢?
這個(gè)問(wèn)題確實(shí)比較棘手,因?yàn)?,從單純的技術(shù)上講,每個(gè)開發(fā)者的機(jī)器都是對(duì)等的。 沒(méi)有主次之分。
我們還有辦法:
技術(shù)上不能解決的問(wèn)題,我們從制度上解決. ---- 孟子
從分布式環(huán)境中我們模擬出一個(gè)中心來(lái):
我們引入Leader這個(gè)角色。 他的機(jī)器是最終版本。 每個(gè)開發(fā)者都必須把最終的修改版push給leader。 leader會(huì)review然后提交。他就是最終版本。
恩, 我們好像還漏掉一個(gè)大問(wèn)題, 說(shuō)git,怎么漏掉了github呢。 github是什么。
我們知道,如果每個(gè)人都本地修改的話,本地可能不安全,(硬盤壞了,筆記本被偷了。。。。)
我們可能需要一個(gè)安全的服務(wù)器來(lái)存儲(chǔ)/備份代碼。對(duì)于開源的項(xiàng)目,可能是需要一個(gè)地方分享你的代碼,你不可能24小時(shí)開著筆記本,讓別人從你這pull代碼。
于是, 網(wǎng)上所謂的源代碼托管網(wǎng)站就冒出來(lái)了。 github就是這樣的。
看這個(gè)圖, 我只修改了其中一個(gè)地方, 就是把leader的機(jī)器換成了。 github.com 提供的在線賬戶。
所以, git和 github沒(méi)有必然聯(lián)系。
這里有幾個(gè)常用的在線托管地址, 有興趣自己看看:
1. github.com, 大名鼎鼎。 免費(fèi),只支持開源項(xiàng)目, 不支持私有項(xiàng)目。
2. bitbucket.com ,同樣大名鼎鼎。 免費(fèi), 支持開源項(xiàng)目和私有項(xiàng)目。 免費(fèi)用戶最多5個(gè)。項(xiàng)目無(wú)限。
3. git.oschina.net, 國(guó)內(nèi)頂尖托管平臺(tái), 我本人正在用的就是這個(gè)。 支持開源項(xiàng)目和私有項(xiàng)目。 成員無(wú)限, 項(xiàng)目1000個(gè)。 使用的是阿里云服務(wù)器, 速度極快。 本人推薦5顆星。
二, git開發(fā)的一般流程。
上面其實(shí)已經(jīng)涉及了使用git的一般結(jié)構(gòu)。 那么生產(chǎn)環(huán)境中, git是如何應(yīng)用的呢。
本人知道的模型如下:
每個(gè)開發(fā)者都向自己的項(xiàng)目服務(wù)器(leader)提交代碼, leader向公司服務(wù)器提交。 當(dāng)然這個(gè)leader是可有可無(wú)的。如果項(xiàng)目小的話, 開發(fā)者可以直接向公司服務(wù)器提交。 公司的服務(wù)器就是最終版本。 一般公司還會(huì)有持續(xù)集成CI服務(wù)器。 我們可以在公司的源碼服務(wù)器上設(shè)置git的hook。 自動(dòng)觸發(fā)CI服務(wù)器工作。 這是后話,不多說(shuō)了。
三, 前面的概念弄清楚之后, 上手就容易多了。 我們helloworld。
1. 這是git的官網(wǎng):http://git-scm.com/ 去下載windows客戶端。
如果是linux的話, sudo apt-get install gitcore
2. 注意, 官網(wǎng)的客戶端都是命令行的。 命令行是高階用法。不在這里說(shuō)了。 我們下個(gè)gui。
我用的是TortoiseGit。 https://code.google.com/p/tortoisegit/ , 大家恐怕都熟悉svn時(shí)代的烏龜爬。上手快。 我們下面的操作都是gui上的。
安裝過(guò)程不說(shuō)了。 一路next。 我們跳過(guò)。 直接到最后。假設(shè)你現(xiàn)在已經(jīng)安裝完成了。
比如我已經(jīng)有一個(gè)工程, helloworld:
這是工程文件的內(nèi)部結(jié)構(gòu):
現(xiàn)在我們想讓helloworld用上git怎么做呢, 在工程根目錄下,點(diǎn)擊鼠標(biāo)右鍵。
選擇 Create repository。
這個(gè)選項(xiàng)不要勾上。 稍后我們會(huì)解釋什么是 Bare。
然后就完成了。
里面多出了一個(gè) .git目錄。 當(dāng)前的目錄(及其所有子目錄)已經(jīng)在git的監(jiān)視之中了。 但是當(dāng)前的代碼還沒(méi)有添加到git的跟蹤數(shù)據(jù)庫(kù)中。 簡(jiǎn)單的說(shuō),git還沒(méi)有儲(chǔ)存任何版本信息。 我們需要進(jìn)行第一次提交:
git默認(rèn)你本地會(huì)有一個(gè)主分支master。
我們寫一些注釋, 并且勾上想要添加到git的文件。 (如果有子目錄的話, 它都會(huì)顯示在這里。)
提交完成, close。 這個(gè)push按鈕,稍后再說(shuō)。
好了,這個(gè)時(shí)候我們?cè)诨氐轿募A,看看有什么變化:
現(xiàn)在這些文件就添加進(jìn)git了。
剩下的你就可以為所欲為了。 像svn一樣,自己試試幾個(gè)命令吧: 修改, difference, commit, revert,
到這你已經(jīng)入門了。
最后我們來(lái)介紹兩個(gè)重要的概念。
1. “git目錄”, 就是指上圖中,項(xiàng)目根目錄下生成的 “.git” 文件夾。 用過(guò)svn的同學(xué)都知道, svn有‘.svn’文件夾。 他們的作用差不多。 這里保存了git的本地?cái)?shù)據(jù)庫(kù)資料。就是所有的版本信息。 跟svn不一樣的地方就是,git中,只有根目錄下有這個(gè)目錄, 所有的子目錄下都沒(méi)有, 也就是每個(gè)工程只有一個(gè).git目錄。
2. “git工作目錄”, 其實(shí)就是你的工程目錄, 比如上圖中的工程根目錄:H:\mycode\helloworld\ 。 為什么有這個(gè)工作目錄呢。 就是你工作在這個(gè)目錄下, 你可以修改編輯里面的文件,最后把修改提交給git目錄。 這個(gè)共工作目錄還有一個(gè)神奇的地方就是, 你可以創(chuàng)建不同的branch(你默認(rèn)工作在master下), 當(dāng)你切換不同的branch時(shí), 你的工作目錄(工程目錄)里的所有文件都會(huì)變成當(dāng)前branch對(duì)應(yīng)的文件。 這個(gè)不展開了。
最后再解釋上面留下的兩個(gè)問(wèn)題:
1. “Bare” 創(chuàng)建Bare的意思是: 你只想要git的數(shù)據(jù)庫(kù)(即上圖中的 “.git”文件夾。), 而不想要當(dāng)前的文件。 這通常用在公司的中央服務(wù)器上。 它不需要當(dāng)前項(xiàng)目的實(shí)際代碼,只需要保留git數(shù)據(jù)庫(kù)信息就行了。
2. 在commit之后的對(duì)話框中的 push的意思。 正如之前介紹的。 push的意識(shí)是把你的修改push給別人(或者給公共服務(wù)器)。 commit的意思只是提交到本地的 .git 數(shù)據(jù)庫(kù)。 并沒(méi)有更新給別人。 所以提交完之后, 烏龜很貼心的給我們一個(gè)push按鈕。 通過(guò)它你可以快速把剛剛的修改push給別人,或者給服務(wù)器。
總結(jié), 這不是一本完全的git手冊(cè),但至少能讓你消除git恐懼癥,快速入手。
這里是gitbook的中文版: http://gitbook.liuhui998.com/ 他是真正的大而全。 為什么最后才說(shuō)它呢? 因?yàn)樗拖袷且槐?牛津大辭典, 全面,權(quán)威。 但是對(duì)于幼兒園小朋友學(xué)英語(yǔ),就不能一上來(lái)就背它吧。 先跟著別人說(shuō),上手要緊。 之后有什么不會(huì)的,再去查字典。
以上是由福州網(wǎng)站建設(shè)的小編為你分享了"GIT 基礎(chǔ)知識(shí)"文章,如果你在這方面有什么問(wèn)題,隨時(shí)聯(lián)系我們