版本控制

在軟體開發的過程中,有時會遇到下列需求:

<

blockquote>

舊檔案被別人或自己覆蓋,甚至遺失。

  1. 想復原自己前幾天寫的版本。
    想檢查新版本和舊版本的差異。
    檢查某段程式碼是誰修改的。
    軟體發行,需要分成維護版跟開發版。

人腦是有限的,我們很難隨時記得自己做了甚麼修改,需要工具幫助來滿足上面的需求,這個概念就是版本控制,版本控制概略可分兩種,一種為集中式版本控制,像:Subversion及Perforce等,另一種為分散式版本控制,像Git、Mercurial、Bazaar、Darcs等。


集中式版本控制系統採主從式架構,具備單一伺服器,記錄所有版本的檔案,開發者從伺服器取出檔案進行修改和更新,更新完後再將資料提交給伺服器,由於資料皆在單一伺服器上,開發者如果想要提交新版本、查詢各版本差異,都要透過網路連到伺服器才能進行,所以如果無法連上伺服器時,比如伺服器當機一個小時,這段時間就無發提交資料或取出檔案,且如果伺服器用來儲存資料庫的硬碟損毀,而且沒有相關的備份,則此專案的開發歷史資訊都會遺失。


在分散式版本控制系統,客戶端不只是取出最後一版的檔案,而是完整複製整個儲存庫,包括專案的開發歷史,所以即使是整個系統的電腦損毀,皆可將任何一個客戶端先前複製的資料還原到伺服器。且由於開發者本機端也有一個本地端儲存庫(Repository),儲存了所有變更過的檔案,以及專案的歷史紀錄,所以開發者不須透過網路,便能提交新版本的程式碼到本機端儲存庫,等到需要將本機端儲存庫和遠端儲存庫同步時,才需要使用網路,降低對網路的依賴程度。


集中式和分散式兩種版本控制相比,集中式版本控制管理員可調整存取權限,限制各使用者能做的事,或開啟某些目錄的權限,而且維護系統相對容易,但是都要透過網路連到伺服器才能進行操作。


回到首頁

回到Git教學


參考資料:

Git介紹

Git達人教你搞懂GitHub基礎觀念