版本管理在軟件開發(fā)過程中十分常見,如下是常見的一種最佳實踐历帚,適用于所有的版本管理系統(tǒng)(svn, git等)滔岳。
發(fā)布分支:
軟件開發(fā)有一個典型的循環(huán):編碼,測試挽牢,發(fā)布澈蟆,然后重復(fù)。過程中會遇到如下兩個問題:
- 當(dāng)測試人員在測試假定穩(wěn)定版本時卓研,開發(fā)人員需要繼續(xù)開發(fā)新功能趴俘,不能因為測試而停止開發(fā),且新開發(fā)未測試的功能也不能影響到發(fā)布版本的穩(wěn)定性奏赘。
- 可以找到老的發(fā)布過的源代碼寥闪,當(dāng)線上出現(xiàn)bug或者有緊急的功能需要上線的時候,可以直接依賴發(fā)布過的代碼進(jìn)行修復(fù)磨淌,而不用等主版本的發(fā)布疲憋。
典型流程建議:
- 開發(fā)提交1.0版本的改動到 trunk
- 開發(fā)結(jié)束,團(tuán)隊認(rèn)為軟件可以準(zhǔn)備發(fā)布梁只,從 trunk 上拷貝出一個分支 branch_1.0
- 開發(fā)團(tuán)隊繼續(xù)開發(fā)2.0版本的功能缚柳,提交到 trunk。
- 測試團(tuán)隊對需要發(fā)布的 branch_1.0 進(jìn)行測試搪锣,如果有bug則直接修改在 branch_1.0 上秋忙,直到該分支測試通過則停止修改。
- 從測試通過的 branch_1.0 上拷貝一個分支 tag_1.0 作為最新發(fā)布版本的源代碼构舟,并將 branch_1.0 的改動merge回trunk灰追。
- 如果線上有bug需要修改,或者有緊急的功能需要添加上線(指上線時間必須要在2.0之前的改動),則在 branch_1.0 上進(jìn)行修改弹澎,測試通過之后拷貝出 tag_1.1 進(jìn)行發(fā)布朴下,并將改動merge回trunk。
- 循環(huán)該流程進(jìn)行版本迭代苦蒿。
特性分支:
當(dāng)有復(fù)雜的修改殴胧,并且不希望干擾到 trunk 的穩(wěn)定性或發(fā)布計劃時,就需要使用特性分支佩迟。推薦流程如下:
- 從最新的release分支中拷貝出特性分支溃肪,如從 tag_1.0 拷貝出 branch_new_feature,新特性相關(guān)的改動都提交到 branch_new_feature 中音五。
- 如果特性分支的開發(fā)周期比較長惫撰,則需要使該分支和 trunk 或最新的release版本保持同步,merge到 trunk 或者最新的tag到 branch_new_feature 中躺涝。
- 完成特性分支的開發(fā)之后厨钻,merge 回 trunk(如果和主版本一起發(fā)布),或者從最新的tag中打一個分支出來 branch_1.1坚嗜,將特性分支merge到該分支中(不和主版本一起發(fā)布夯膀,所以只和最新的release版本進(jìn)行merge)。
- merge之后的代碼通過測試后就可以發(fā)布了苍蔬。
- 刪除已經(jīng)merge回release的特性分支诱建,保持倉庫的整潔。