我們為什么需要版本控制系統?

jopen 9年前發布 | 37K 次閱讀 版本控制 版本控制系統

甚至早在踏上程序員的工作崗位的第一天之前,我就開始使用版本控制系統了,那時候,使用的是SVN。而現在工作五年多了,我使用的版本控制系統,換成了Git。現在,我試圖通過一個分享,將我的同事,或者一般的小伙伴,帶入到Git的世界,這時候,我就必須搞清楚很多基本的問題,比如,這個問題,為什么我們需要使用版本控制系統呢?

上周五,我們公司新加入的工程師,給大伙分享了Git的一點經驗心得,談及這一類的問題的時候,表達了類似非常理所當然的態度,甚至我都不記得他有提及過任何相關的詞句。但是,假如我現在必須給一個從來沒有用過版本控制,甚至不知道版本控制的人,講解版本控制系統的必要性的時候,這個問題真的有那么理所當然么?

我想,答案是否定的。(談及這個東西的時候,我忍不住又想啰嗦了,我在跟人溝通的時候,常常發現,很多人無法分清楚,什么是主觀的,什么是客觀的,更別提要求他們分清楚,什么是自己已經知道的事實,而這里面哪些東西,站在你對面的人其實并不清楚,也即信息的不對稱程度到底達到什么級別?所有這些歸結為三個字,就是“想當然”。所以,當你想當然地覺得,這還用說嘛,或者覺得,顯然這是個正確的理由的時候,其實,對別人來說,確實沒有那么的理所當然)

對這個問題,我想到的第一個理由,竟然是,因為需求是千變萬化的。那又怎么樣!?我心里那個從來不懂版本控制的伙計,大聲嚷嚷。仔細一想,竟然真的沒什么必然因果聯系。需求怎么變,你代碼就怎么寫好了。今天需求是這樣,你代碼就改成這樣,明天需求變了,你代碼跟著變了,但是這到底關“版本控制”毛事?

第二個不是答案的回答,通過版本控制系統,我們可以記錄代碼的每個版本。這只是解釋了版本控制系統可以干什么,根本沒有提及為什么!!我心里的另一個伙計有點不耐煩了,大聲吼出來了,“為什么我們要記錄每個版本?”

第三個,第四個,……然并卵……

于是,我不得不思索,版本到底是什么東西,版本的意義何在?什么是細思恐極呢?就是這個時候,大腦一片空白,我突然意識到自己的知識是何其貧乏,自己的思維是何其空洞,腦子里根深蒂固認為的一些概念,推敲一下,竟然毫無根基。原諒我,我偷懶了,我翻閱了一下《代碼大全》(以前我鄙視過這本書,我現在表示深深的悔意)。

假如,當我改了關于A功能的若干處代碼,這時候,我發現B功能無法正常運作了。那么,當我想探究為什么的時候,有一個自然而然的歸因(未必正確) ——你剛改了代碼,系統掛了,所以,是你改掛的——但是你必須證明并定位到這個具體的問題,才可能修復,那就必須精確找出來剛改的這若干處代碼,這時候,你需要將代碼與上一次還能正常運行時候的代碼進行比較。太棒了,版本的概念出現了!!!我無法不歡呼!

故事到這里,就變得非常Resonable了,因為到這里,已經沒什么“感覺”,“直覺”的內容了,已經很客觀了。某種改變,導致某種結果,無論你要證明有因果關系,還是沒有因果關系,最好的方法,就是把這種改變的所有內容,羅列出來,逐一分析。假如我們在系統的每一個可以正確運行的點,都去設立一個版本的話,就可以存在很多的這樣用于比較的基準,從而幫助我們快速歸因到問題的真正所在,從而解決他們,而這就是版本控制系統存在必要性的其中一個原因!

除此以外,版本控制系統,有很多附加的好處:

代碼存儲和備份。我用過的每個版本控制系統,都具備代碼存儲的功能,而因為公司、組織加持的運維管理,導致它們往往可以保障代碼不會丟失。

可以回退到上一次正確的版本,完全放棄弄糟的一切。

多人協作場景下,可以保持自己的代碼副本最新,可以解決共同編輯一個文件的沖突情況。

OK,到現在為止,我基本已經說服了我自己,我必須要使用版本控制系統的。相信已經有一部分程序員也真的相信了這件事情。但是非程序員呢?真的需要版本控制系統么?或者哪一類工種,需要版本控制系統的支持呢?是否對他們來說真的有必要性?

</div> 來自:http://sexywp.com/why-we-need-vcs.htm

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!