淺談版本管控(Version Control)
首先,為什麼要使用版本管控(Version Control)呢?說說自己以前在研究所時期,剛開始寫C/C++跟OpenCV時,往往就是修改了一下程式或寫一些功能之後,為了避免後續程式碼可能被改到不能用,就會加上時間做區隔,類似做備份使用,但久而久之備份的內容越來越多,有時想還原回正常版本卻忘記不知哪邊被改動,因為距離上次修改太久了,所以只能細部查找差異性,間接花了很多時間在做非功能性開發,這個狀況持續到我工作接觸到Git才有所改變,此時發現原來寫軟體除了邏輯要夠用之外,其實蠻多小工具也要學會,因為正式的專案其架構都蠻大的,所以工作上會切分成寫人機介面(前端)與演算法(後端),而某方寫完功能後一定會做測試,後續並做整合測試等等,因此若用改時間或註解紀錄程式碼修改差異,其效率或除錯速度都不好,所以才會出現版本管控(Version Control)這個概念。
更進一步的說,寫程式除了功能寫完之外,一般還會有整合、測試、進版等等,所以不是單單寫完程式就沒事!!畢竟如果寫出一堆Bug給別人就尷尬了,或是自己未來要除錯也不容易,總結來說版本管控(Version Control)就是用來記錄程式碼每次更改的差異,並能協助我們紀錄特定版本,若出現某版本因修改後而不穩定時,還能還原先前穩定版本,同時能找到是誰偷放這個臭蟲,哈哈哈哈,然後發現原來是自己搞的鬼!
版本管控系統(Version Control Systems)
版本管控常用的工具,可分為集中式(Centralized Version Control Systems)與分散式(Distributed Version Control Systems),集中式顧名思義就是說將其程式碼存放在遠端的伺服器(Server),因此每次的提交(Commit)都必須要連到這個伺服器(Server)才行,本機端是無法做提交(Commit)動作,同時企業使用時可能要付費,若伺服器(Server)不小心發生什麼毀損,程式碼可能就會不翼而飛,其架構如下:
相反的分散式則可以在本機端進行提交(Commit),同時也能夠上傳(push)到伺服器(Server),以我來看其實分散式的伺服器(Server)也可以視為是一種本機,只是相對於我們它是遠端而已,重點是它是免費的,免錢的最好啦!!其架構如下所示:
沒有留言:
張貼留言