簡介
本文辨析在參與開源項目時會遇到的tag與release的概念區(qū)別與聯(lián)系,并比較兩者的創(chuàng)建方法。
定義
標簽(tag)是特定提交(commit)一個指針,也就是每個tag對應(yīng)一個特定的commit。
Release是具有changelogs和二進制文件的一級對象,它可以代表超出Git架構(gòu)本身的一個特定時間點之前的所有項目歷史。也就是通過release,不但能夠通過源碼體現(xiàn)出項目歷史,還能通過已經(jīng)編譯好的二進制文件來進一步描述此時的項目狀態(tài)?!俺鯣it架構(gòu)本身“的意思則在于,git本身只能記錄項目修改,本質(zhì)上不適合將編譯好的項目二進制文件記錄下來。而通過release則把項目二進制文件保存了下來,方便用戶下載,也方便查找特定版本的二進制文件。
以下是Github official announcement所定義原文:
Releases are first-class objects with changelogs and binary assets that present a full project history beyond Git artifacts.
創(chuàng)建方法
Release分為兩種:lightweight and annotated.
創(chuàng)建lightweight類型的tag:
$ git tag v1.4-lw
創(chuàng)建annotated類型的tag:
$ git tag -a v1.4 -m "my version 1.4"
通過tag可以返回到項目的特定狀態(tài)下,所以可以將tag看作是在大量commit中設(shè)定的書簽。
創(chuàng)建release,則需要通過源碼托管商的網(wǎng)頁操作界面來進行,一般會要求填寫tag名、分支以及相應(yīng)的發(fā)布說明,還可上傳編譯好的程序、打包好的文件等。
比較
標簽是git中的概念,而release則是Github、碼云等源碼托管商所提供的更高層的概念。也就是說git本身是沒有release這個概念的,只有tag。
兩者之間的關(guān)系則是,release基于tag,為tag添加更豐富的信息,一般是編譯好的文件。
總結(jié)
Release是源碼托管商對git的tag功能的增強。通過git提供的tag功能,我們可以給項目進行版本標識,以識別特定的版本,如v0.1.0、v1.0.0等。而通過源碼托管商提供的release功能,在tag的基礎(chǔ)上我們可以添加編譯好的二進制文件等,如.deb、.exe等給特定的版本提供更多的信息,方便用戶,也方便后期查找特定版本的程序。