Git Workshop - 為何要學習版本控制?

Git Workshop 系列文目錄

Git 官網一開頭就解釋了 Git 是什麼:

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

它是一個「分散式的版本控制系統」(DVCS)工具,它能協助軟體工程師做原始碼版本控制

版本控制

英文簡寫為 VCSSCM,台灣常簡稱為「版控」。

版本控制指的是原始資料的變化,如一個很經典的軟體工程故事--The Evolution of a Software Engineer 是一個十年程式碼的變化過程,每一次變化都各有一個或一個以上的程式碼異動,把這些歷程都記錄下來,即為版本控制。

下面範例使用 PHP 重寫原文程式,並使用 Git 作為版本控制結構。

這個變化會與另一個設計程式的主題有關,未來有機會再來討論。

進一步說明:每一次上線的程式,若把每一次原始碼都做記錄,那就會了解版本控制的初衷。

每個版本都是一堆修改

這是廢話,但像 Git 開分支非常方便,反而容易忘了版本控制最初的目的,而真的變成「逐末忘本」--追求細枝末節,忘記事物根本的、主要的部分(漢語網)。大家在主線(mainline)上開分支各自開發,但最終分支都要回到主線一起決定誰才是「下一次的修改者」,而各個工作流程的差異只是決定的方法不同。

這呼應了上面提到的初衷:一個分支的完成與合併,對原本主要分支來說,就是一個版本,或是一堆修改。分支只是管理辦法,核心還是要回到版本控制的初衷,這是後續在學習 Git 要多加注意的。

學習 Git 有比較好嗎?

Git 有跨平台、輕巧、使用者多等優勢,加上最大的開放原始碼托管平台 GitHub 以及開源的原始碼管理服務 GitLab,豐富了 Git 生態系與使用情境。目前台灣採用 Git 做為主要版本控制工具的公司也很多,也蠻多使用其他版本控制工具的公司也都漸漸轉移到 Git 上使用。學習 Git 不管是對於工作或者是未來學習其他東西來說,都有很大的幫助。 就算現在用不到,未來碰到的機率也非常高,學著備用不吃虧的。

當然也是有缺點:自由度太高,所以就容易遇到自由流派的工作流程,這時在團隊合作上可能就會很痛苦。

寫在本小節的最後

提醒大家一個重點:

版控的目的,是要讓團隊成員了解程式碼修改歷史,來幫助解決程式碼衝突,而不是要減少程式碼衝突。

程式碼衝突是有機率會發生的--如果兩個人修改同一個檔案的同個地方肯定會發生,因此應該是要朝「如何避免衝突」這個方向思考才對,而不是期望改用各種花式工作流程(workflow)能夠解決。