我們為什么需要版本控制系統?
甚至早在踏上程序員的工作崗位的第一天之前,我就開始使用版本控制系統了,那時候,使用的是SVN。而現在工作五年多了,我使用的版本控制系統,換成了Git。現在,我試圖通過一個分享,將我的同事,或者一般的小伙伴,帶入到Git的世界,這時候,我就必須搞清楚很多基本的問題,比如,這個問題,為什么我們需要使用版本控制系統呢?
上周五,我們公司新加入的工程師,給大伙分享了Git的一點經驗心得,談及這一類的問題的時候,表達了類似非常理所當然的態度,甚至我都不記得他有提及過任何相關的詞句。但是,假如我現在必須給一個從來沒有用過版本控制,甚至不知道版本控制的人,講解版本控制系統的必要性的時候,這個問題真的有那么理所當然么?
我想,答案是否定的。(談及這個東西的時候,我忍不住又想啰嗦了,我在跟人溝通的時候,常常發現,很多人無法分清楚,什么是主觀的,什么是客觀的,更別提要求他們分清楚,什么是自己已經知道的事實,而這里面哪些東西,站在你對面的人其實并不清楚,也即信息的不對稱程度到底達到什么級別?所有這些歸結為三個字,就是“想當然”。所以,當你想當然地覺得,這還用說嘛,或者覺得,顯然這是個正確的理由的時候,其實,對別人來說,確實沒有那么的理所當然)
對這個問題,我想到的第一個理由,竟然是,因為需求是千變萬化的。那又怎么樣!?我心里那個從來不懂版本控制的伙計,大聲嚷嚷。仔細一想,竟然真的沒什么必然因果聯系。需求怎么變,你代碼就怎么寫好了。今天需求是這樣,你代碼就改成這樣,明天需求變了,你代碼跟著變了,但是這到底關“版本控制”毛事?
第二個不是答案的回答,通過版本控制系統,我們可以記錄代碼的每個版本。這只是解釋了版本控制系統可以干什么,根本沒有提及為什么!!我心里的另一個伙計有點不耐煩了,大聲吼出來了,“為什么我們要記錄每個版本?”
第三個,第四個,……然并卵……
于是,我不得不思索,版本到底是什么東西,版本的意義何在?什么是細思恐極呢?就是這個時候,大腦一片空白,我突然意識到自己的知識是何其貧乏,自己的思維是何其空洞,腦子里根深蒂固認為的一些概念,推敲一下,竟然毫無根基。原諒我,我偷懶了,我翻閱了一下《代碼大全》(以前我鄙視過這本書,我現在表示深深的悔意)。
假如,當我改了關于A功能的若干處代碼,這時候,我發現B功能無法正常運作了。那么,當我想探究為什么的時候,有一個自然而然的歸因(未必正確) ——你剛改了代碼,系統掛了,所以,是你改掛的——但是你必須證明并定位到這個具體的問題,才可能修復,那就必須精確找出來剛改的這若干處代碼,這時候,你需要將代碼與上一次還能正常運行時候的代碼進行比較。太棒了,版本的概念出現了!!!我無法不歡呼!
故事到這里,就變得非常Resonable了,因為到這里,已經沒什么“感覺”,“直覺”的內容了,已經很客觀了。某種改變,導致某種結果,無論你要證明有因果關系,還是沒有因果關系,最好的方法,就是把這種改變的所有內容,羅列出來,逐一分析。假如我們在系統的每一個可以正確運行的點,都去設立一個版本的話,就可以存在很多的這樣用于比較的基準,從而幫助我們快速歸因到問題的真正所在,從而解決他們,而這就是版本控制系統存在必要性的其中一個原因!
除此以外,版本控制系統,有很多附加的好處:
代碼存儲和備份。我用過的每個版本控制系統,都具備代碼存儲的功能,而因為公司、組織加持的運維管理,導致它們往往可以保障代碼不會丟失。
可以回退到上一次正確的版本,完全放棄弄糟的一切。
多人協作場景下,可以保持自己的代碼副本最新,可以解決共同編輯一個文件的沖突情況。
OK,到現在為止,我基本已經說服了我自己,我必須要使用版本控制系統的。相信已經有一部分程序員也真的相信了這件事情。但是非程序員呢?真的需要版本控制系統么?或者哪一類工種,需要版本控制系統的支持呢?是否對他們來說真的有必要性?
</div> 來自:http://sexywp.com/why-we-need-vcs.htm