版本的故事(二)版本的誕生
研發人員不斷修改程式碼,在程式碼庫上形成一個 Commit 鏈條,每一個 Commit 記錄了所有文件在某一時刻的狀態,這個狀態稱為一個「快照」。在所有提交中,我們認為其中一些提交具有特殊的意義,比如我們完成了里程碑任務,這時可以發布版本了。對於這些特殊的提交,我們創建一個標籤(Tag)與之關聯。這個標籤,我們稱之為「基準線」。創建標籤的工作,我們稱之為「基準線化」。
程式碼基準線標誌著版本的誕生,程式碼基準線就是這個版本的「出生證」。發布版本的時候必須創建 Tag,我們用 Tag 名稱作為版本號,編譯構建的時候把版本號烙印在發布包的某個地方(最容易辨認的地方就是文件名)。以後無論這個二進位包走到哪裡,無論經過多少年,我們都可以根據它的名稱知道它的版本號,根據版本號找到這張出生證,知道這個版本的來歷,查閱它的身世家譜。版本一旦發布,這個出生證就是不能變更的,既不能修改,也不能刪除。否則版本就會成為一個沒有身份、來歷不明的可疑分子。
我們必須在出生證上寫些什麼,創建 Tag 的時候可以加一句注釋:
# 切換到主分支,我們一般在主分支發布版本
$ git checkout master
# 創建標籤,記錄標籤資訊 $ git tag -a 1.0.0 -m "完成雲主機維護功能發布測試版"
使用 Github、GitLab 這樣的程式碼管理平台,我們可以在頁面上記錄更多的資訊。以下是在 GitLab 平台創建 Tag 的介面,可以為這個 Tag 編寫一個完整的說明,記敘發布目的、完成功能、修復缺陷、遺留問題,還可以使用 Markdown 語法:
這樣一來,這張」出生證「的資訊就更加完整了。
現在這個版本有了「出生證」,隨著工作的推進,它還需要有另一些證:
- 如果它通過了測試證明是一個合格的版本,要發一個「合格證」;
- 它和它的朋友們組成一個集體,通過集成測試,成為一個「產品」,要發一個「畢業證」;
- 運維把它拿到環境上部署,要發一個「上崗證」。
後面會寫一系列的文章說明這些「證」的作用和內容。但是在這之前,我們先要說一說「版本號」是個什麼概念,怎樣給版本起一個既好聽、又有意義的名字。