1.簡介
Git是一個開源的分布式版本控制系統(tǒng)倍权,
是目前世界上最快、最簡單捞烟、也是最流行的版本控制工具账锹,
它可以有效、高速的管理從很小到非常大的項目版本坷襟。
Git是Linus Torvalds為了幫助管理Linux內(nèi)核源碼,
而開發(fā)的一款開源的免費的版本控制工具生年。
Git主要用途:
1.保存每一次修改婴程,便于追蹤查看項目中所有文件的變化;
2.同時使用多種方式實現(xiàn)一個任務(并行分支)抱婉,然后挑選最好的實現(xiàn)留下档叔;
3.方便多人協(xié)作開發(fā)同一個項目桌粉,保持項目的一致。
2.版本控制系統(tǒng)
版本控制系統(tǒng)是一種記錄一個或多個文件內(nèi)容變化衙四,
以便將來查閱特定版本修訂情況的系統(tǒng)铃肯。
該系統(tǒng)通常用于管理軟件源代碼文件的版本,
實際上對任何類型的文件都能進行版本控制传蹈。
如果你是位作家或設計師押逼,
可能會需要保存某個文件的所有修訂版本,
通常情況下需要手動備份這些文件惦界。
采用版本控制系統(tǒng)(VCS)管理所有文件版本挑格,
可以回溯文件之前的所有狀態(tài),
甚至整個項目回退到某個歷史狀態(tài)沾歪。
這樣就可以隨心所欲的進行創(chuàng)作漂彤,
而不用擔心修改之前的文件丟失問題。
你可以比較文件兩個版本之間的變化灾搏,
查看項目中其他人的修改記錄挫望,
即使有人誤改誤刪項目中的文件,
也可以輕松恢復到原樣狂窑。
3.本地版本控制系統(tǒng)
通常大家會復制整個目錄來備份項目和文件媳板,
或許還會改名加上備份時間以示區(qū)別。
不過有時候會混淆所在的工作目錄蕾域,
一旦弄錯文件丟了數(shù)據(jù)就沒法撤銷恢復拷肌。
為了解決這個問題,
人們開發(fā)了許多種本地版本控制系統(tǒng)旨巷,
大多都是采用某種簡單的數(shù)據(jù)庫來記錄文件的歷次更新差異巨缘。
4.集中式版本控制系統(tǒng)
接下來人們又遇到一個問題,
如何讓在不同電腦上的開發(fā)者協(xié)同工作采呐?
于是集中化的版本控制系統(tǒng)應運而生若锁。
這類系統(tǒng)有CVS,SVN等斧吐,
它們有一個集中管理的服務器又固,
保存所有文件的修訂版本,
而協(xié)同工作的人們通過客戶端連接服務器煤率,
取出最新的文件或者提交文件仰冠。
相較于本地版本控制系統(tǒng),
每個人都可以看到項目中的其他人正在做些什么蝶糯。
管理員也可以輕松掌控每個開發(fā)者的權(quán)限洋只,
并且管理一個集中系統(tǒng)遠比維護各個終端本地數(shù)據(jù)庫容易。
缺點是中央服務器的單點故障,
如果服務器宕機识虚,那么在這段時間內(nèi)肢扯,
誰都無法提交更新,也就無法協(xié)同工作担锤。
要是中央服務器的磁盤發(fā)生故障蔚晨,
而沒有備份,就會有丟失數(shù)據(jù)的風險肛循。
同樣本地版本控制系統(tǒng)也存在類似問題铭腕。
集中式版本控制系統(tǒng)最大問題就是必須聯(lián)網(wǎng),
而且對帶寬和網(wǎng)速要求很高育拨,
如果在局域網(wǎng)內(nèi)還好谨履,帶寬和速度通常是夠的,
否則既不能提交也不能回滾熬丧,
更不能查看文件的歷史記錄笋粟,
對于使用者的工作效率是個巨大的打擊。
5.分布式版本控制系統(tǒng)
于是分布式版本控制系統(tǒng)面世了析蝴。
這類系統(tǒng)有Git害捕,Mercurial等,
客戶端并不只提取最新版本的文件快照闷畸,
而是把代碼倉庫完整地鏡像下來尝盼。
這么即使任何一處協(xié)同工作用的服務器發(fā)生故障,
事后都可以用任何一個客戶端鏡像出來的本地倉庫恢復佑菩。
因為每一次的提取操作盾沫,
實際上都是一次對代碼倉庫的完整克隆,
通過這種機制實現(xiàn)了分布式去中心化殿漠。
這類系統(tǒng)可以指定和多個不同的遠端代碼倉庫進行交互赴精。
你可以在同一個項目中,分別和不同工作小組的人相互協(xié)作绞幌。
你可以根據(jù)需要設定不同的協(xié)作流程蕾哟,比如層次模型式的工作流,
而這在以前的集中式系統(tǒng)中是無法實現(xiàn)的莲蜘。
6.Git和SVN區(qū)別
我們使用比較多的集中式版本控制系統(tǒng)是SVN谭确,
經(jīng)常會拿來和分布式版本控制系統(tǒng)Git進行比較,
Git本地倉庫包含代碼庫還有歷史庫票渠,
在本地的環(huán)境開發(fā)就可以記錄歷史逐哈,
而SVN的歷史庫存在于中央倉庫,
每次對比與提交代碼都必須連接到中央倉庫才能進行问顷。
使用SVN必須聯(lián)網(wǎng)鞠眉,否則只能罷工薯鼠,
而Git只在和他人同步代碼時需要聯(lián)網(wǎng),
由于Git本地記錄和分支的關(guān)系械蹋,
合并同步代碼的工作也非常方便。
當然Git的優(yōu)勢不單是不必聯(lián)網(wǎng)這么簡單羞芍,
還有Git極其強大的分支管理哗戈,
在Git中創(chuàng)建一個分支或者標簽是非常簡單的,
但是SVN創(chuàng)建一個分支就必須復制整個目錄荷科,
這就把SVN等遠遠拋在了后面唯咬。
另外SVN必須有一個"中央服務器",
而Git每一個客戶端都可以作為服務器畏浆,
通常我們會約定一個"偽中央服務器"同步代碼胆胰。
7.偽中央服務器
分布式版本控制系統(tǒng)根本沒有"中央服務器",
每個人的電腦上都是一個完整的版本庫刻获,
那么多人開發(fā)如何協(xié)作呢蜀涨?
比如你在自己電腦上改了文件A,
你的同事也在他的電腦上也改了文件A蝎毡,
這時你們倆之間只需把各自的修改推送給對方厚柳,
就可以互相看到對方的修改了。
在實際使用分布式版本控制系統(tǒng)的時候沐兵,
很少在兩人之間的電腦上推送版本庫的修改别垮,
因為可能你們倆不在一個局域網(wǎng)內(nèi),
兩臺電腦互相訪問不了扎谎,
也可能今天你的同事請假了碳想,
他的電腦壓根沒有開機。
因此分布式版本控制系統(tǒng)通常有一臺"偽中央服務器"毁靶,
但這個服務器的作用僅僅是用來方便"交換"大家的修改胧奔,
沒有它大家也一樣干活,
換一臺服務器作為"偽中央服務器"也很方便老充。