GitHub进一步了解
為什么要引入Git:
1)用簡(jiǎn)單一點(diǎn)的例子來講:
一個(gè)公司有幾個(gè)甚至十幾個(gè)人共同合作開發(fā)一款項(xiàng)目的時(shí)候,公司對(duì)項(xiàng)目代碼有明確規(guī)范,不可能再像學(xué)校做的小項(xiàng)目一樣,你覺得哪個(gè)同學(xué)的代碼寫的不好,或者和你的代碼有沖突,’Duang’直接給別人改掉或刪掉,也就是想怎么改就怎么改。這種情況對(duì)于十幾個(gè)人合作的項(xiàng)目來說肯定是不行的。這個(gè)時(shí)候就需要版本的控制
?
2)版本控制:
舉一個(gè)簡(jiǎn)單的例子,如果你用Microsoft Word寫過長(zhǎng)篇大論,那你一定有這樣的經(jīng)歷:?
想刪除一個(gè)段落,又怕將來想恢復(fù)找不回來怎么辦?有辦法,先把當(dāng)前文件“另存為……”一個(gè)新的Word文件,再接著改,改到一定程度,再“另存為……”一個(gè)新文件,這樣一直改下去,最后你的Word文檔變成了這樣:?
過了一周,你想找回被刪除的文字,但是已經(jīng)記不清刪除前保存在哪個(gè)文件里了,只好一個(gè)一個(gè)文件去找,真麻煩。
看著一堆亂七八糟的文件,想保留最新的一個(gè),然后把其他的刪掉,又怕哪天會(huì)用上,還不敢刪,真郁悶。
更要命的是,有些部分需要你的其他同事幫助填寫,于是你把文件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 | 張三 | 刪除了第一段簡(jiǎn)介 | 2015/4/18 13:25 |
| 2 | 張三 | 增加了第二,三,四,五段的內(nèi)容 | 2015/4/19 12:30 |
| 3 | 李四 | 修改了第三段合同金額數(shù)據(jù) | 2015/4/20 09:09 |
| 4 | 王五 | 修改了第四段關(guān)于后續(xù)維護(hù)的條款 | 2015/5/01 11:22 |
這樣,你可以在這個(gè)版本管理工具上清楚的看到每次不同的人在同一文件上所做的修改說明,并且可以選擇下載你需要的版本下來再進(jìn)行維護(hù)。
?
3)Git的誕生:
下面這段文字,大家就當(dāng)看故事一樣看一下就行了。介紹這段,主要其實(shí)就是說明一個(gè)問題,為什么很多同學(xué)一入手Git感覺很高深難用.因?yàn)镚it是機(jī)遇Linux系統(tǒng)的,所以對(duì)于用慣了傻瓜的window的同學(xué)來說,Linux系統(tǒng)相當(dāng)?shù)哪吧?#xff0c;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等等。
?
4)集中式和分布式版本控制系統(tǒng)有什么區(qū)別:
集中式的版本控制:Linus一直痛恨的CVS及SVN都是集中式的版本控制系統(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):其根本沒有“中央服務(wù)器”,每個(gè)人的電腦上都是一個(gè)完整的版本庫(kù),這樣,你工作的時(shí)候,就不需要聯(lián)網(wǎng)了,因?yàn)榘姹編?kù)就在你自己的電腦上。既然每個(gè)人電腦上都有一個(gè)完整的版本庫(kù),那多個(gè)人如何協(xié)作呢?比方說你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時(shí),你們倆之間只需把各自的修改推送給對(duì)方,就可以互相看到對(duì)方的修改了。
【總結(jié):分布式版本控制系統(tǒng)的安全性要高很多,因?yàn)槊總€(gè)人電腦里都有完整的版本庫(kù),某一個(gè)人的電腦壞掉了不要緊,隨便從其他人那里復(fù)制一個(gè)就可以了。而集中式版本控制系統(tǒng)的中央服務(wù)器要是出了問題,所有人都沒法干活了。分布式版本控制系統(tǒng)通常也有一臺(tái)充當(dāng)“中央服務(wù)器”的電腦,但這個(gè)服務(wù)器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣干活,只是交換修改不方便而已。 】
?
以上的種種原因使得Git這個(gè)工具產(chǎn)生-------->
1、GitHub 與 Git 的關(guān)系
1)、Git是一款免費(fèi)、開源的分布式版本控制系統(tǒng),他是著名的 Linux 發(fā)明者 Linus Torvalds 開發(fā)的。說到版本控制系統(tǒng),估計(jì)很多人都用過 SVN ,只不過 Git 是新時(shí)代的產(chǎn)物,如果你還在用 SVN 來管理你的代碼,那就真的有些落伍了。不管是學(xué)習(xí) GitHub ,還是以后想從事編程行業(yè),Git 都可以算是必備技能了,所以從現(xiàn)在開始建議你先去學(xué)習(xí)熟悉下 Git 。通俗來說它是用來進(jìn)行版本控制的,就是用來保存項(xiàng)目的地方。
但是項(xiàng)目要是運(yùn)行,還是需要你本地的環(huán)境,它只不過是用來保存代碼罷了。
【SVN:SVN是Subversion的簡(jiǎn)稱,是一個(gè)開放源代碼的版本控制系統(tǒng),相較于RCS、CVS,它采用了分支管理系統(tǒng),它的設(shè)計(jì)目標(biāo)就是取代CVS。互聯(lián)網(wǎng)上很多版本控制服務(wù)已從CVS遷移到Subversion。Svn是一種集中式文件版本管理系統(tǒng),】
【分布式版本控制 (DVCS) 是一種不需要中心服務(wù)器的管理文件版本的方法,但是它也可以使用中心服務(wù)器。它的真正價(jià)值在于,它允許開發(fā)人員組實(shí)現(xiàn)他們選擇的幾乎任何工作流,允許開發(fā)人員以各種新的方式工作它能夠完成很多事情,比如傳統(tǒng)的集中式模型,或兩個(gè)開發(fā)人員在咖啡館通過無線連接協(xié)同工作,等等。】
?
2)、GitHub?上面說了,主要提供基于 git 的版本托管服務(wù)。也就是說現(xiàn)在 GitHub 上托管的所有項(xiàng)目代碼都是基于 Git 來進(jìn)行版本控制的,所以 Git 只是 GitHub 上用來管理項(xiàng)目的一個(gè)工具而已,GitHub 的功能可遠(yuǎn)不止于此!5 GitHub 的影響力
?
3)GitHub如何操作?
可以通過客戶端進(jìn)行代碼提交,更新。
也可以通過指令來進(jìn)行操作。
?
2?GitHub 有什么用:
學(xué)習(xí)優(yōu)秀的開源項(xiàng)目開源社區(qū),我們的軟件開發(fā)才能變得越來越容易,越來越快速。試想你在做項(xiàng)目時(shí),如果每一模塊都要自己去寫,如網(wǎng)絡(luò)庫(kù)、圖片加載庫(kù)、ORM庫(kù)等等,自己寫的好不好是一回事,時(shí)間與資源是很大的成本。對(duì)于大公司可能會(huì)有人力與資源去發(fā)明一套自己的輪子,但是對(duì)于大部分互聯(lián)網(wǎng)創(chuàng)業(yè)公司來說時(shí)間就是一切。而且你在使用開源項(xiàng)目的過程也可以學(xué)習(xí)他們優(yōu)秀的設(shè)計(jì)思想、實(shí)現(xiàn)方式,這是最好的學(xué)習(xí)資料,也是一份提升自己能力的絕佳方式!
?
3?GitHub網(wǎng)站以及一些簡(jiǎn)單的GitHub工具的使用步驟:
1)首先當(dāng)然是注冊(cè)一個(gè)賬戶,點(diǎn)擊?Sign Up注冊(cè)
?
2.分別填入昵稱,郵箱,登錄密碼,確認(rèn)密碼?
3.選擇Free(默認(rèn))完成注冊(cè) <如果你看不懂上面的英文,你可以把網(wǎng)頁(yè)翻譯成中文>
?
4.點(diǎn)擊?Finish sign up?完成注冊(cè),直接跳轉(zhuǎn)到郵箱驗(yàn)證(非常重要)?
5.點(diǎn)擊Send verification email,GitHub會(huì)發(fā)送驗(yàn)證郵件到你的郵箱,進(jìn)入你的郵箱,按照默認(rèn)鏈接激活注冊(cè)。注意這一步非常重要,如果不激活郵箱驗(yàn)證,后面的操作將都不會(huì)產(chǎn)生效果?
?
注意:其實(shí)這些操作都可以通過git shell命令行來完成,只是我們這里結(jié)合著GitHub網(wǎng)站和可視化工具
?
?
二、GitHub for Windows
1、下載安裝 1)下載地址:https://windows.github.com/?2)雙擊進(jìn)行安裝
?
3).安裝好之后桌面出現(xiàn)下面的圖標(biāo),GitHub就傻瓜的圖形界面,Git Shell是命令行的版本,我們這里直接使用圖形界面就ok?
?
4)如果第一次進(jìn)入軟件,會(huì)直接提示讓你登錄,輸入你剛剛在GitHub注冊(cè)的賬戶即可
?
6)登錄之后新建倉(cāng)庫(kù)
點(diǎn)擊左上角:?
進(jìn)行新建倉(cāng)庫(kù),如下圖:
?
創(chuàng)建好之后,如下圖:?
?
表示這個(gè)一個(gè)全新的Repository,在自己的電腦上也出現(xiàn)了相應(yīng)的目錄?
?
?
接下來發(fā)布這個(gè)倉(cāng)庫(kù),點(diǎn)擊右上角Publish Repository發(fā)布倉(cāng)庫(kù),同時(shí)要求填寫倉(cāng)庫(kù)相應(yīng)描述?
?
右上角變?yōu)镾yn表示已經(jīng)發(fā)布成功,右鍵單擊View on GitHub就能直接通過瀏覽器進(jìn)入GitHub網(wǎng)站看到我們發(fā)布的新倉(cāng)庫(kù)了。?
?
?
提交同步文件7)倉(cāng)庫(kù)創(chuàng)建好之后,相當(dāng)于就是我們的第一個(gè)版本,你可以在網(wǎng)站左上角看到有一個(gè)?1 commit這就表示是我們第一次提交,比如我們現(xiàn)在往倉(cāng)庫(kù)里面(這里指myFirstReposity文件夾里面)新加一些“測(cè)試.doc”文件,馬上可以看到在工具上多出了一項(xiàng)UnCommited changes?
下一步打開GitHub程序,會(huì)發(fā)現(xiàn)界面有所改變,之后按照提示填寫內(nèi)容,然后點(diǎn)擊提交即可,如下圖所示:
提交之后如下圖所示,然后點(diǎn)擊右上角進(jìn)行同步
?
同步完之后在瀏覽器中查看,這時(shí)項(xiàng)目的提交次數(shù)已經(jīng)變成了”2“,如下圖所示:
?
?
?
點(diǎn)擊可以查看先前的版本,如下圖所示:
?
修改項(xiàng)目
1)計(jì)算機(jī)中修改先前新建的空白文檔”測(cè)試.doc“,路下圖所示:
?
修改保存之后,在軟件中再一次進(jìn)行提交同步操作,如下圖所示:
?
同步之后再瀏覽器中查看,提交次數(shù)已經(jīng)變成了3次,之后可以分別下載第二次與第三次提交的文檔,可以比較看出我們修改的內(nèi)容。
?
?
另外,你可以對(duì)你自己的資料進(jìn)行修改
?
?
?
更進(jìn)一步的理解GitHub:
1、GitHub網(wǎng)站也只是Git的殼而已,你其實(shí)可以不用把它想成一個(gè)網(wǎng)站,它只是一個(gè)分布式版本控制軟件服務(wù)器的殼。所以我們主要注冊(cè)之后,自己的代碼可以往服務(wù)器上傳。
2、Git這種分布式版本控制又像是一個(gè)交友平臺(tái)。什么意思呢?比如你注冊(cè)了一個(gè)交友平臺(tái),想認(rèn)識(shí)一些陌生人,你會(huì)上傳一些自己的漂亮的照片,自己的簡(jiǎn)介,自己的心情,自己的興趣愛好等等去結(jié)交一些志同道合的人。別人看到了,會(huì)聯(lián)系你,如果覺得你好,可能還會(huì)把你介紹給其他人。而其人沒有直接看到你的人,又通過別人認(rèn)識(shí)了你。這其實(shí)Git的中心思想
?
3、上面一直在說Repository倉(cāng)庫(kù),其實(shí)你就可以理解為你的項(xiàng)目,一個(gè)倉(cāng)庫(kù)就是你的一個(gè)項(xiàng)目。所以上面的那些步驟,不過是自己在往項(xiàng)目里面提交。如果是團(tuán)隊(duì)合作又怎么做的呢?其實(shí)很簡(jiǎn)單,就像上面所的,就像交友一樣。
【注意:我們下面所說的另一個(gè)用戶相當(dāng)于另外一個(gè)人和另外一臺(tái)電腦了】
1、在網(wǎng)站上操作Fork(叉)
1)現(xiàn)在我們用另外一個(gè)用戶登錄GitHub賬戶,找到之前to-striver用戶上傳的叫做myFirstRepository的倉(cāng)庫(kù)?
2.現(xiàn)在你找到了這個(gè)倉(cāng)庫(kù),可以將這個(gè)倉(cāng)庫(kù)直接加入到你的賬戶當(dāng)中,點(diǎn)擊右上角的Fork,這個(gè)倉(cāng)庫(kù)就加入進(jìn)來了?
3.下圖可以明顯看到現(xiàn)在這個(gè)新用戶已經(jīng)Fork了YIFer創(chuàng)建的這份項(xiàng)目?
?
?
5)同樣將Frok的文件保存到本地目錄。
?
?
6)當(dāng)然這里就可以和之前一樣,這個(gè)新用戶同樣可以提交修改文件,步驟和之前一樣。但是注意一點(diǎn),這個(gè)用戶提交修改的文件,只是相當(dāng)于在他自己Fork的目錄下。簡(jiǎn)單來說,意思就是你把文件拷貝了一份,然后你在拷貝的這份文件上面進(jìn)行修改什么的,對(duì)源文件是沒有影響的?
?
?
Pull Requests(拉請(qǐng)求)
7)如果新用戶希望自己修改的東西對(duì)YIFer的代碼有影響那么就必須提交申請(qǐng),讓to-strive用戶接受,這個(gè)就是pull requests.在工具的右上角,點(diǎn)擊create pull requests??
9)提交成功,可以直接點(diǎn)擊鏈接,查看這次pull requests?
?
?
10)如果是to-strive用戶,接收到別人的pull requests之后,就會(huì)在網(wǎng)站上看到,注意紅色框部分?
?
11)點(diǎn)擊進(jìn)入,可以看到具體別人提交的pull requests?
?
12)點(diǎn)擊查看這次提交,如果可行,選擇合并?Merge pull request?
?
13)合并成功?
?
為什么要?jiǎng)?chuàng)建分支:
1)當(dāng)一個(gè)項(xiàng)目有很多個(gè)模塊,那么我們可以根據(jù)模塊打出分支,然后讓每個(gè)開發(fā)在對(duì)應(yīng)的模塊的分支上面進(jìn)行開發(fā)。最后再由一個(gè)人進(jìn)行分支合并即可。
2)成功發(fā)送一個(gè)合并請(qǐng)求之后,圖標(biāo)會(huì)發(fā)生改變:?
? ? ? 之后點(diǎn)擊會(huì)跳轉(zhuǎn)至網(wǎng)頁(yè)確定真正合并:?
? ? ? 當(dāng)我們執(zhí)行了刪除掉已經(jīng)不用的分支之后,遠(yuǎn)程庫(kù)上將不再有這個(gè)分支,此時(shí)在客戶端此分支上執(zhí)行sync操作之后,會(huì)發(fā)現(xiàn) ? ?sync按鈕又變回了publish按鈕。此時(shí)這個(gè)分支是一個(gè)本地庫(kù)分支;
?
總結(jié)一些術(shù)語
?
Git 術(shù)語
| 倉(cāng)庫(kù) | 一個(gè)倉(cāng)庫(kù)包括了所有的版本信息、所有的分支和標(biāo)記信息. |
| Repository | 在Git中倉(cāng)庫(kù)的每份拷貝都是完整的。倉(cāng)庫(kù)讓你可以從中 |
| ? | 取得你的工作副本。 |
| ? | 一個(gè)分支意味著一個(gè)獨(dú)立的、擁有自己歷史信息的代碼線 |
| 分支 | (code line)。你可以從已有的代碼中生成一個(gè)新的分支 |
| Branches | ,這個(gè)分支與剩余的分支完全獨(dú)立。默認(rèn)的分支往往是叫 |
| ? | master。用戶可以選擇一個(gè)分支,選擇一個(gè)分支叫做 |
| ? | checkout. |
| 標(biāo)記 | 一個(gè)標(biāo)記指的是某個(gè)分支某個(gè)特定時(shí)間點(diǎn)的狀態(tài)。通過標(biāo) |
| Tags | 記,可以很方便的切換到標(biāo)記時(shí)的狀態(tài),例如2009年1月25 |
| ? | 號(hào)在testing分支上的代碼狀態(tài) |
| 提交 | 提交代碼后,倉(cāng)庫(kù)會(huì)創(chuàng)建一個(gè)新的版本。這個(gè)版本可以在 |
| Commit | 后續(xù)被重新獲得。每次提交都包括作者和提交者,作者和 |
| ? | 提交者可以是不同的人 |
| URL | URl用來標(biāo)識(shí)一個(gè)倉(cāng)庫(kù)的位置 |
| ? | 用來表示代碼的一個(gè)版本狀態(tài)。Git通過用SHA1 hash算法 |
| 修訂 | 表示的id來標(biāo)識(shí)不同的版本。每一個(gè) SHA1 id都是160位長(zhǎng) |
| Revision | ,16進(jìn)制標(biāo)識(shí)的字符串.最新的版本可以通過HEAD來獲取. |
| ? | 之前的版本可以通過"HEAD~1"來獲取,以此類推。 |
總結(jié)
以上是生活随笔為你收集整理的GitHub进一步了解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈ButterKnife对Androi
- 下一篇: JDBC的流数据