【第182期 December 5, 2012】
 

研發新視界

專案程式版本控管心得分享(下)

作者/陳冠寧

[發表日期:2012/11/5]


TFS 功能實作

第一次建立專案之本機副本:

時機:
‧專案成員第一次欲取得專案的程式時
‧本機上之專案結構已弄亂,可以砍掉工作區下所有檔案整個方案重下

步驟:
‧執行VS2008/ 2010選單中檔案->原始檔控制->從原始檔控制開啟,點選專案之.sln檔取出所有程式碼,讓VS幫你下載Server上之整個方案檔並產生相關目錄結構
‧開啟Team總管


《圖八》

連接到TFS

《圖九》


《圖十》


《圖十一》


勾選所需的專案名稱-->按下 確定鍵

《圖十二》


點選 原始檔

《圖十三》


點選 工作區

《圖十四》


《圖十五》


《圖十六》


按下確定鍵後,取得專案之最新版本

《圖十七》


專案成員平時取得最新的版本:

時機:
‧每日剛上班時
‧每日下班前
‧想要check out程式進行修改時
‧專案有重大更新時

說明:「取得最新版本」是最常用的指令,這個指令會從Server上下載最新版本的程式至工作區中,以確定你是在最新的版本上進行開發,所以,專案成員應時常執行這個指令,以確保本機工作區副本與Server是同步的,另外,如果本機程式已在簽出狀態,這個指令並不會覆寫工作區中已簽出的檔案,如果比對到檔案版本衝突,請務必解決。

步驟:在Team 總管視窗點選方案節點,如"SubBrokerage",按右鍵選擇「取得最新版本(遞迴)」,也可點選某資料夾或某檔案只取得該資料夾或檔案的最新版本,務必注意的一點是,若點選一資料夾選取取得最新版本(遞迴),會將此資料夾底下的所有檔案全部更新,若要局部更新不可使用此功能。取得最新版本時若有發生衝突,請務必解決!

專案成員平時簽出(Check Out):

時機:欲對某支程式進行修改時 (直接以TFS原有程式碼做修改)

說明:Team Foundation不會在簽出時自動取得最新版本,而只是將目前的工作區版本設為可寫入而已,所以要簽出某程式進行修改前,請先執行「取得最新的版本」,以確定你是在最新的版本上進行開發;另外,如果TFS設定為允許共用簽出時,為了避免兩人同時簽出同一支程式進行修改造成版本衝突,修改共用程式時請用「鎖定」指令執行簽出。

步驟:
‧先對要修改的程式按右鍵選擇「取得最新版本」,確定要修改的程式是最新版
‧如果是共用簽出,直接在檔案上編輯即可自動簽出該程式(圖示為紅色的勾),如果要修改共用程式,請執行「鎖定」指令,再點選「簽出-不允許其他使用者簽出及簽入」選項

時機:欲對某支程式進行修改時 (以其它程式碼覆蓋原有舊程式碼做修改)

說明:把檔案直接複製到受管控的目錄下,但是當你想 Check-in 的時候卻發生「沒有暫止的變更」情況!


《圖十八》


步驟:
‧這時我們可以開啟「原始檔控制總管」,並在該專案節點按下右鍵選擇「比較」
‧在「比較」的對話框裡,「來源路徑」預設是伺服器上的路徑,「目標路徑」是你本地端的路徑,由於你將檔案複製到「目標路徑」下了,所以必須「找出」那些「只存在目標路徑」的檔案,所以必須參考下圖勾選「顯示只存在目的路徑的項目」選項
‧最後就會比對出哪些「只存在目的端的檔案清單」,但是由於有許多目錄原本就不應該被 Check-in 到版本庫,像是 bin 目錄、obj 目錄、*.user、…等等,所以在列出「只存在目的端的檔案清單」時會發現有許多不相關的檔案出現,你必須找出那些真正需要的檔案並加入到版本庫中
‧加完檔案之後就可以從檔案清單中看到該檔案已經有了「暫止的變更」狀態,也代表在這個時候執行 Check-in 動作就能把這些新增的檔案簽入了

專案成員平時簽入(Check In):

時機:
‧每日下班前
‧程式改到某個階段時
‧修改了某支共用程式時
‧有重大更新時

說明:簽入指令會將工作區中已簽出進行一連串的修改(稱作暫止的變更),上傳至TFS中以建立變更集,如此其他專案成員才能以「取得最新的版本」指令取得你所已簽入的變更集,請注意簽入作業是受交易保護,如果簽入暫止的變更中有任一程式發生衝突,則整個簽入會失敗,簡單地講就是要嘛全部簽入成功,要嘛全部簽入失敗,另外如果簽入到一半時網路發生問題也會造成全部失敗,簽入時如果發現版本衝突,請先解決後再重新簽入

步驟:
‧執行編譯,確定整個專案可編譯成功(目前簽入原則為必須編譯成功才可簽入)
‧開啟「暫止的變更」視窗,勾選要簽入的程式碼,包含.vbproj或.sln,除了很確定不需要check in的檔案,如Web.config,其他有修改的程式請一併勾選一次簽入,請不要直接從方案總管直接點選某程式簽入,不但很容易漏且會增加太多變更集增加管理上的負擔!
‧簽入過程如果有任一檔案發生版本衝突,請先解決,再重新簽入!
‧簽入完成後,請開啟原始檔控制總管,點選工具列上的「記錄」鈕(如下圖),查看剛才簽入的程式是否已產生新的變更集,以確定簽入成功
‧若最後決定此次變更不簽入,可使用復原暫止的變更此功能,回覆到本機之前更改前的版本


《圖十九》


《圖二十》


專案完全改版:

時機:被交代一個任務,因大幅度與其他版本進行併版或蓋版的動作,必須批次修改檔案內容,這時就可以用以下技巧來進行批次更新

步驟:
‧先把「整個方案」簽出,簽出所有檔案,這樣才能將檔案的「唯讀」屬性取消
‧這時就可以開始批次進行檔案異動的工作,做完之後再 Check-in 檔案,Visual Studio 2008 可自動判斷哪些檔案改過、哪些沒改過。程式碼可進行差異比對與變更追蹤
‧之後再使用檢視記錄的功能,確認是否有簽入Check-in 成功即可


《圖二十一》


《圖二十二》


《圖二十三》


發生衝突之解決說明:

時機:當取得最新版本或簽入時,可能會發生版本衝突,點選「解決」鈕後就會出現如下視窗,底下說明不同選項的解決做法


《圖二十四》


‧為我合併變更:如果兩邊修改的內容沒有衝突的話,例如User A修改了X程序,User B修改了Y程序,則可以選此選項將兩邊的修改合併
‧合併合併工具中的變更:出現合併變更的視窗,用視覺化方式檢視兩邊版本差異,並手動進行修改後,再進行合併
‧復原我的本機版本變更:放棄本機的修改,以Server的最新版本覆蓋本機的修改
‧捨棄伺服器版本的變更:保留本機修改的版本,可以稍候執行簽入指令將本機的被本上傳至Server覆蓋Server上的版本

要執行任一種解決衝突策略前,務必請先按「比較」鈕,先了解兩邊版本的差異之處,再進行衝突解決,千萬不要在還沒看過兩邊版本差異前就直接進行衝突解決,以避免正確的版本被覆蓋!

其他注意事項

‧請不要使用檔案總管對工作區目錄下的檔案進行刪除,重新命名或移動等動作,永遠使用VS2008方案總管對專案下的檔案進行檔案管理!

一旦在VS2008方案總管中新增、刪除、或重命名程式,會造成.vbproj檔案變更,所以請立即簽入.vbproj以及新增、刪除、或重命名的程式,以讓其他成員在取得最新版本時能取得你所新增、刪除、或重命名的程式。

總結

本文介紹了版本控制的一些基本觀念和術語,也大概提了一下導入版本控制系統所需的準備工作,在具備了這些基礎概念之後,便可以開始學習工具的使用,希望本文提供了足夠的基礎,作為您進一步學習使用版本控制系統的跳板。

事實上,大部分的版本控制系統只儲存兩個版本之間有差異的部分,而不是儲存完整的兩份檔案內容。

參考資料

1.各家版本控制系統的比較表,可以參考看看:
http://better-scm.berlios.de/comparison/comparison.html
2.TFS v.s. SVN 的比較文章
http://dobrzanski.net/2010/04/17/tfs-subversion/
http://blog.hinshelwood.com/tfs-vs.-subversion-fact-check/
3.TortoiseSVN官方網頁
http://tortoisesvn.tigris.org/
4.http://laodaobazi.iteye.com/blog/905058