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