只要有寫過程式,相信一定都有聽過 GitHub 這個網站,不但可以在上面管理、分享自己的 code,工程師還可以用 GitHub 當作自己面試的履歷。
如此強大的 GitHub 究竟是什麼呢?
其實 GitHub 是一個「透過 Git 進行版本控制」的「軟體原始碼代管服務平台」,簡單來說,就是一個擁有各種開源軟體的地方,可以讓任何人存取、使用、修改,而原作者可以使用 Git 來進行控管,達成「共同創作」。
大概有一點了解後,我們先來談談什麼是「版本控制」?
其實版本控制不僅僅應用於程式設計上,像是美術設計、撰寫文章也常常會聽到有人說 ver1、ver2 等等,所謂的版本控制其實就是去紀錄一個檔案所修改的部分,當你未來想回到某一個版本時就可以簡單呼叫。
而在程式中的版本控制就是去追蹤程式碼的修改,並保留每個版本的檔案,如下圖所示。
而版本控制的發展大致可以分成本地端、集中化、分散式這三種,在接下來的文章中我們會簡單介紹這三種的差異。
最常見的本地端版本控制使用的方式是直接將檔案複製到另一個資料夾,這個方法很簡單、直覺,但卻可能會因為人為的失誤造成複寫、刪除。
為了解決此問題,在當時就有一個叫 RCS 的本地端版本控制供使用。
RCS 的工作原理是在硬碟上保存一堆特殊格式的補丁集合(patch set,即檔案從一個版本變更到另一個版本所需資訊);通過套用任意的補丁,便可以重新產生出每個版本的檔案內容。
但這個辦法卻無法與其他開發者共同合作開發專案,為了解決這個問題,集中化的版本控制系統(如:CVS、Subversion 和 Perforce)誕生了。
這個系統有一個伺服器來管理所有版本的檔案,而許多用戶端會連到這台伺服器取出檔案來使用。
相較於本地端,集中化的方式可以讓開發者彼此間知道對方的工作內容,輕鬆達成共同合作,但集中化跟本地端都有一個致命的缺點,就是當伺服器損壞時,檔案就會跟著遺失。
於是分散式版本控制系統(Distributed Version Control Systems,簡稱 DVCSs)就出現了。 在此系統(如 Git、Mercurial、Bazaar 和 Darcs)中,用戶端不但可以取出最新的檔案資訊,還可以將整個檔案夾備份,假如有任何一個伺服器損壞,就可以採用用戶端的資料來進行還原。
相信大家對版本控制有一定的瞭解了,明天我們就來介紹什麼是 Git 吧!