版本製作自動化方案

(文章來源於GAME-LAB 歡迎大家來GAME-LAB!地址:http://game-lab.org/?p=96


最近工作比較忙,遊戲功能相關的代碼就敲個不停,根本無暇去思考一些東西。趁着週末,整理下上週關於版本製作流程的優化的一些想法,有時間就立馬去實現,希望能提高項目組做版本的速度,省得每次程序兄弟每天等版本等的都想哭,還有做版本的兄弟,天天就重複着在一堆svn revision list裏面挑來挑去,如此機械的工作,希望腳本可以幫他們完成一部分。既省了時間,也省了人力。只期望以後少加點班。

問題

有兩個svn分支,一個用於開發(主幹Trunk),一個是對外發布的分支(BranchA)。根據要發佈的內容列表,合併主幹相關的revision到BranchA,有衝突解決之。

這裏,要發佈的內容列表就是taskid列表,某個要發佈的功能都會對應唯一的一個taskid,代碼提交的時候,提交日誌裏面一般都會標有相對於的taskid。製作版本的核心,就是根據這些taskid從主幹代碼提交日誌裏面去找相應的日誌條目所對應的revision,然後合併到BranchA,合併過程中有衝突則找相應的程序予以解決。重複上面的操作,直到tasklist裏面所有功能相關的revision都被合併入BranchA。然後提交,編譯,測試。

版本製作現狀

手動維護一份未從Trunk分支合併到BranchA分支的revision列表,Trunk新提交的日誌也只能手動複製下來,格式化處理一下,然後複製到未合併列表中。根據需求,將要發佈的功能,一個一個在未合併列表裏面手動查找,然後去合併,有衝突就通知相應的開發程序去解決衝突,合併好之後把相應的條目從未合併列表中刪除。全部手動完成的,機械並且效率低下,並且很容易漏掉某條提交revision,實在於心不忍啊!

解決方案

對於上述問題和現在版本製作現狀,提出下面的解決方案。實現製作版本的腳本化,提高工作效率。

注意:版本製作的自動化,剛開始實施可能會有點問題。因爲大家的提交日誌,雖然包含了功能taskid,但格式千奇百怪,沒有統一,雖然腳本可以識別大多數提交日誌,但還是存在挑錯revision的可能,對此也不必擔心,在此提供了一個工具去檢測這些不符合規格的提交日誌,可以先手動去改下這些提交日誌即可。希望以後svn提交日誌的格式也符合指定的規格,這樣更加利於版本製作的自動化。

版本工具腳本

  • config 用於配置一些相關參數,比如svn主幹或分支的路徑、未合併revision列表文件、task列表文件、版本製作日誌等等。
  • getlog 根據指定的revision或revision1:revision2從主幹上抽取相應的日誌,並格式化處理之,格式化處理的文件有3種格式,下面會有詳細介紹。
  • pickup 根據要合併的功能列表文件(tasklist)從未合併列表unmergelist中挑選出要合併的revision列表,並將其從未合併列表中刪除。生產一個要合併的revision列表文件mergelist,和新的unmergelist文件。
  • merge 根據mergelist提供的revision,將主幹Trunk中相應的revision合併到BranchA中,沒有衝突就自動提交併繼續下一個revision,有衝突就會停止並給出提示,此時可以讓相應的提交者解決衝突。
  • resolve 衝突手動解決完後,執行該腳步,自動解決所有的衝突然後提交到BranchA,繼續執行merge腳步直到結束。

三種版本日誌格式

  1. list  revision數字列表文件。
  2. xml xml格式的提交日誌,提供了詳細的提交信息,版本號、提交者、日期和時間、提交日誌等。
  3. txt  文本格式,只提供版本號、提交者和提交日誌。


三種文件格式的轉換

整體流程

製作版本的整體流程圖如下:

  1. ready 準備階段,設置配置。
  2. getlog 提取主幹日誌。
  3. pickup 挑版本。
  4. merge 合併。
  5. resolve 解決衝突。
整體流程

準備工作(ready)

執行所有腳本之前,請先做好準備工作。詳細內容如下:

  • 準備好當前的未合併列表文件(unmergedlist)
  • 準備好要發佈的功能列表文件(tasklist)
  • 創建一個工作目錄,腳本生成的結果和中間結果都會在此目錄下
  • 配置config腳步裏面相關的參數,包含svn路徑、工作目錄等等相關信息。

準備工作

提取日誌(getlog)

從主幹中提取指定版本範圍的提交日誌。此操作根據需求可選。生產的gelostlist文件的路徑還有版本範圍都在config配置中可進行設置。

提取日誌

挑選版本(pickup)

完成版本挑選過程,代替人工挑選版本的機械重複勞動。

挑選版本

合併版本(merge)

自動完成版本的合併工作,並提交至BranchA。有衝突就會停止,手動解決完衝突後繼續執行該腳步。合併完所有mergelist裏面的revision。

合併

解決衝突(resolve)

merge的時候發現衝突了,讓相應的提交者修改完衝突後,執行該腳本,完成解決衝突的工作並提交至BranchA。然後繼續執行merge腳本。

解決衝突

總結

希望上面的腳本可以實現版本製作的自動化,上面的內容不包含編譯、打包、測試等過程。對於版本製作者而言,上面這些工作佔據了大量的時間,並且非常容易出錯。希望該方案可以解決版本製作中的一些問題。

2011/08/21 12:49 上海·松江 david++


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章