Version Control
撰寫程式前,必須先理解如何控制版本。
版本控制就是將文本檔案 (text-based file) 進行管理的方法。試想,將一個檔案新增 n 行,刪除 m 行,可以變成另一個檔案;只需要儲存這兩個變更,而非同時儲存兩個檔案(除非最差的狀況下)。這個比較的演算法算是經典題目,有興趣可以自行搜尋。
至於此架構下的其他二進制檔案 (binary file) 只能同時儲存兩個副本,因此不推薦將頻繁變更的二進制檔案加入,諸如:圖片、音樂、影片、壓縮檔、編譯好的程式和程式庫、資料庫(需要額外版控)等等。
版本控制最大的好處即是,新增 n 行,刪除 m 行,可以成為最新的版本;新增 m 行,刪除 n 行,可以回到上一個版本。每次新增刪除會視為一次提交 (Commit),當一個還未提交的內容想要清除,則會移轉成 stash,回到上一個提交(可以復原)。提交可以取別名,稱為標籤 (Tag),如 v1.0
,這樣就不用打它的雜湊值 (hash code) 來操作了。
為了測試方便,提交不是線性堆疊的,而是可以基於相同的提交延伸出不同的堆疊,稱為分支 (Branch);基於的提交(分岔點)和其之前的提交稱為 Base。
版本控制分為集中式版本控制與分散式版本控制,前者由伺服器統一處理,近端的版本僅為備份,必須重新同步 (synchronize) 後才可以繼續提交,類似線上遊戲的數據同步。而後者則是去中心化的存放各種版本樹,並可藉由一台甚至多台伺服器做版本之間的提交。注意儘管分散式的方式可以進行「同步」行為,但也可以是非必要的,藉此開發者能夠測試出更多程式的可能性。
現在較為流行的版本控制方式大都是分散式的,最流行的莫屬 Git。