在開發(fā)中 git 是最常用的版本控制軟件,在學習極客時間蘇玲的《玩轉 git 三劍客》前扎酷,對 git 的使用只停留在add
,commit
遏匆,pull
法挨,push
上,稍微復雜點的checkout
就不會使用了幅聘。在一次項目中凡纳,用到了merge
,讓我對git
充滿了好奇帝蒿,正好這時極客時間推出了 git 的課程, 我毫不猶豫的購買了暴氏。
雖然 git 已經(jīng)爛大街了答渔,再寫關于 git 的文章也沒什么價值了,但我還是要自己寫點文章务豺,一方面記錄自己學習的心得,另一封面敬拓,也鍛煉下自己的寫作能力乘凸,吳軍老師說過:要想讓一個人會說营勤,邏輯清晰寿羞,首先得會寫绪穆。很多人肚子里有東西,但是說不出來难菌,表達的別人看不懂,聽者看來燎窘,和沒有沒太大區(qū)別。所以這也是鍛煉自己的方式铝量。
什么是版本控制
版本控制能夠追蹤工程藍圖從誕生一直到定案的過程,確保由不同人員所編輯的程序文件都能得到同步。
最簡單的版本控制是 copy 多份項目轩拨,并進行適當?shù)木幪栐未洌@種方法高度依賴開發(fā)者的自我紀律,很容易導致錯誤樊卓。
因此自動化的版本控制系統(tǒng)應運而生。
大部分版本控制軟件都采用差分編碼,只保留文件相繼版本之間的差異膳灶,減少存儲空間序厉。
中央式系統(tǒng)和分布式系統(tǒng)
一個項目中有好幾給開發(fā)人員同時參與,如果兩個人同時改變一個文件,而沒有管理訪問權限粹排,就會造成代碼沖突。
所以有兩種方法:1、中央式系統(tǒng),由中央管理訪問權限;2、分布式系統(tǒng)店枣,可以同時容許多個單位同時進行。
版本控制系統(tǒng)演變歷史
在版本控制系統(tǒng)出來之前是怎么開發(fā)的呢叹誉?
- 在服務器上面將文件共享出來鸯两,各自建個文件夾,以目錄拷貝的方式來區(qū)分不同的人開發(fā)的東西长豁;
- 自己開發(fā)的東西也通過這種文件夾的形式標出1.0钧唐、2.0、3.0匠襟;
- 這種方法大家開發(fā)的公共文件是很容易被覆蓋的钝侠,
- 還有我在開發(fā)的時候,我得不停的跟人家說酸舍,我在開發(fā)這個帅韧,你們先別動,
所以溝通成本非常高啃勉,項目集成效率低下忽舟。
以目錄形式區(qū)別不同版本的形式不僅僅是過去,現(xiàn)在還存在淮阐,當然時代在發(fā)展叮阅,在這幾十年當中有很多版本控制系統(tǒng)走入了我們世界,其中像 cvs 和 vsn 這種集中式的控制系統(tǒng)枝嘶,他曾經(jīng)被很多團隊和公司所接受帘饶。
集中式的版本控制系統(tǒng),它有什么樣的特征呢群扶?
- 有集中的版本管理服務器及刻,這個服務器存放了每個文件或者文件夾的演變歷史镀裤。也就是,哪天你本地沒有這個項目缴饭,你去服務器取也是非常容易的暑劝。提供了歷史版本的搜索能力,以及不同版本之間比較的能力颗搂。
- 具備文件版本管理和分支管理能力担猛。可以讓不同的分支做集成丢氢,
優(yōu)點:這些特征使得集中式的版本控制系統(tǒng)傅联,比起之前沒有版本控制的項目,它的效率在集成方面是有明顯的提高的疚察。
缺點:客戶端必須時刻和服務器相連蒸走,因為客戶端不具備服務器端一樣的目錄結構。
有很多人認為貌嫡,集中式的版本控制系統(tǒng)在速度上和性能上是不足的比驻。后來基于集中式的版本控制系統(tǒng)的不足,開發(fā)了分布式的版本控制系統(tǒng)岛抄。
它們最大的區(qū)別是别惦,服務端和客戶端都有完整的版本庫,脫離服務端夫椭,客戶端照樣可以管理版本掸掸,查看歷史和版本比較等多數(shù)操作,都不需要訪問服務器蹭秋,比集中式的VCS更能提高版本管理的效率猾漫。
git 特點
- 最優(yōu)的存儲能力
- 非凡的性能,得益于林納斯是非常有喜的linux內核專家以及文件系統(tǒng)管理專家
- 開源的
- 很容易做備份感凤,支持離線操作
- 很容易定制工作流程
以上參考資料來自:維基百科 和 蘇玲《玩轉 git 三劍客》第一講