在軟體開發過程,每天都會產生新的**,**合併的過程中可能會出現如下問題:
因此,我們希望有一種機制,能夠幫助我們:
乙個標準的版本控制系統 version control system (vcs),通常需要有以下功能:
版本控制系統發展至今有幾種不同的模式:
3.1 local vcs
本地使用複製/貼上
的方式進行管理,缺點是無法協同開發
3.2 centralized vcs (lock,悲觀鎖)
**集中式版本控制系統團隊共用倉庫,當某人需要編輯檔案時,進行鎖定,以免其他人同時編輯時造成衝突。缺點是雖然避免了衝突,但不是很方便。其他人需要排隊才能編輯檔案,如果有人編輯了很久或是忘記解鎖就會造成其他人長時間等待的情況。
3.3 centralized vcs (merge,樂觀鎖)
**集中式版本控制系統團隊共用倉庫,不採用悲觀鎖方式來避免衝突,而是事後發現如果別人也修改相同檔案(衝突),再進行手動修改解決。有很多 vcs 屬於這種型別,如:cvs,subversion,perforce 等
**集中式版本控制系統的共同問題是,做任何操作都需要和伺服器同步,如果伺服器宕機則會造成無法繼續工作的窘迫。
3.4 distributed vcs
分布式版本控制系統,本地也擁有完整的**倉庫,就不會出現上述集中式管理的問題,即使沒有網路,依然可以commit
和看log
,也無需擔心伺服器同步問題。如:git,mercurial,bazaar 等就屬於分布式版本控制系統。缺點是功能比較複雜,上手需要一定的學習時間。
linus在2023年建立了開源的linux,從此linux系統不斷發展,很快就成了最大的伺服器系統軟體了.linus雖然建立了linux,但linux的壯大是靠全世界熱心的志願者參與的,所以有很多人在世界各地為linux編寫**,那麼linux的**是如何管理的呢?
在2023年以前,世界各地的志願者把源**檔案通過diff的方式發給linus,然後由linus本人通過手工方式合併**!!
你也許會想,為什麼linus不把linux**放到版本控制系統裡呢?不是有cvs、svn這些免費的版本控制系統嗎?因為linus堅定地反對cvs和svn,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用.有一些商用的版本控制系統,雖然比cvs、svn好用,但那是付費的,和linux的開源精神不符.
但是到了2023年,linux系統已經發展了十年了,**庫之大讓linus很難繼續通過手工方式管理了.社群的弟兄們也對這種方式表達了強烈不滿,於是linus選擇了乙個商業的版本控制系統bitkeeper,bitkeeper的東家bitmover公司出於人道主義精神,授權linux社群免費使用這個版本控制系統.
在2023年的時候,linux社群裡的乙個牛人,開發samba的andrew試圖破解bitkeeper的協議(這麼幹的其實也不只他乙個),被bitmover公司發現了,於是bitmover公司怒了,要收回linux社群的免費使用權.
於是linus花了兩周時間自己用c寫了乙個分布式版本控制系統,這就是git!乙個月之內,linux系統的原始碼已經由git管理了!
git很快就成為了最流行的分布式版本控制系統,尤其是2023年,github**上線了,它為開源專案免費提供git儲存,無數開源專案開始遷移至github,包括jquery,php,ruby等等.
歷史就是這麼偶然,如果不是當年bitmover公司威脅linux社群,可能現在我們就沒有免費而超級好用的git了.
git是目前世界上最先進的分布式版本控制系統(沒有之一)!
概念解釋:
svn是集中式版本控制系統,版本庫是集中放在**伺服器的,而幹活的時候,用的都是自己的電腦,所以首先要從**伺服器**得到最新的版本,然後幹活,幹完後,需要把自己做完的活推送到**伺服器。集中式版本控制系統是必須聯網才能工作,如果在區域網還可以,頻寬夠大,速度夠快,如果在網際網路下,如果網速慢的話,就鬱悶了。
git是分布式版本控制系統,那麼它就沒有**伺服器的,每個人的電腦就是乙個完整的版本庫,這樣,工作的時候就不需要聯網了,因為版本都是在自己的電腦上。既然每個人的電腦都有乙個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了檔案a,其他人也在電腦上改了檔案a,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。
和集中式版本控制系統相比,分布式版本控制系統的安全性要高很多,因為每個人電腦裡都有完整的版本庫,某乙個人的電腦壞掉了不要緊,隨便從其他人那裡複製乙個就可以了。而集中式版本控制系統的**伺服器要是出了問題,所有人都沒法幹活了。
git的優勢不單是不必聯網這麼簡單,後面我們還會看到git極其強大的分支管理功能,把svn等遠遠拋在了後面。
cvs作為最早的開源而且免費的集中式版本控制系統,直到現在還有不少人在用。由於cvs自身設計的問題,會造成提交檔案不完整,版本庫莫名其妙損壞的情況。同樣是開源而且免費的svn修正了cvs的一些穩定性問題,svn是目前用得最多的集中式版本庫控制系統。
Git教程之如何版本回退
上一章節,我們已經學會了如何建立版本庫,如何提交檔案到版本庫,如何檢視最近提交檔案的記錄,那麼如果現在我們想回退版本怎麼操作呢?現在繼續對readme.txt檔案進行修改,再增加一行,內容為33333333。繼續執行命令如下 git教程之如何版本回退的 1 對readme.txt檔案做了三次修改,現...
Git 基礎教程 之 版本回退
不斷對檔案進行修改,然後不斷提交修改到版本庫里。當你覺得檔案修改到一定程度時,可以儲存乙個 快照 這個 快照 在git中稱為 commit 一旦檔案被改亂了 誤刪了,都可以從最近乙個 commit 恢復。head表示 當前版本 head 表示 上乙個版本 head 表示 上上個版本 head 100...
git使用教程之了解git
1 理解git快照 快照的作用就相當於將舊檔案所佔的空間保留下來,並且儲存乙個引用,而新檔案中會繼續使用與舊檔案內容相同部分的磁碟空間,不同部分則寫入新的磁碟空間。git有乙個head指標,這個指標可以移動,這個指標移動到哪個快照,你就可以檢視該快照也就是當時的狀態。2 git的三種狀態 已提交 c...