以下主要描述了:
- TFS原始碼控制系統的基本情境
- 如何把一個項目添加到原始程式碼控制中
- 如何與伺服器同步
- 如何做Check-In
- 如何做分支與合并
- 什麼是上架與下架
我們知道工作項目是專案管理的基本元素,但是一個項目的成功,光有工作項目還是不夠的。工作項目說明了要做什麼事(例如任務),出了什麼問題(例如Bug),除此之外,我們還需要將程式一行一行地寫出來,TFS的原始程式碼控制控制系統,就能協助我們管理這一行行的代碼,一個個的檔案,一次次的修改,直到產品發布。
1、TFS原始碼控制系統的基本情境
這裡介紹一下,如何在Visual Studio.net中使用原始碼控制系統,我們知道Visual Studio IDE可以和Visual Source Safe等多種原始碼控制系統整合,所以我們首先需要選擇用什麼來控制原始碼,這可以通過從IDE菜單中選擇“工具(Tools)”->“選項(Options)”,在選項對話方塊中,找到原始程式碼控制(Source Control | Plug-in),然後選擇Visual Studio Team Foundation Server:
2、如何把一個項目添加到原始程式碼控制中
首先,我們需要有一個Team 專案,下面我們以測試環境中已有的Team 專案TFSTest為例進行說明,當我們把一個原始碼項目添加到原始程式碼控制系統中時,Visual Studio會為你建立一個工作空間(Workspace)。
一個工作空間是伺服器的檔案、目錄在用戶端的映射。當使用者對原始程式碼控制中的目標進行增加、編輯、刪除、移動、重新命名,或者其他動作時,使用者的修改會保留在工作空間中,標記為工作空間中的“待定/未提交修改”(Pending Change)。這些修改只有被使用者簽入(Check In)後,伺服器上的檔案或目錄才會跟著改變。
下面我們示範建立一個新的解決方案和項目,並將其添加到原始程式碼控制中:
在Visual Studio IDE中,建立一個新的項目,選中“添加到原始程式碼控制”(Add to Source Control):
Integration Environment在後台開始建立項目的架構,然後會提示你,選擇將建立項目添加到TFS上的哪個Team Project中,這裡,我們選擇TFSTest項目,點擊確定:
然後,我們開啟菜單“視圖”->“其他視窗”->“原始程式碼控制資源管理員”:
就可以看到新添加到TFSTestTeam 專案下的ITRequestFormPrj1了:
專案檔夾前面是一個黃色的+號,代表這些都是Pending Change.
如果我們需要把現有的解決方案,或者項目添加到TFS中,那麼可以開啟這些解決方案或者項目,然後右鍵點擊解決方案,選擇“將解決方案添加到原始程式碼控制”:
然後在彈出的視窗中,選擇將解決方案添加到那個Team Project中。
現在我們試著編譯一下項目(類比一下驗證代碼的正確性),然後就將這些Pending Change 簽入到TFS中,選擇“視圖”->“其他視窗”->“暫止的變更”:
就可以看到目前有哪些Pending Change:
然後點擊簽入按鈕,所有被選中的Pending Change檔案都會被簽入。
下面我們看看,如果向已經加入原始程式碼控制的項目中,添加一個檔案,會是什麼情況:
- 首先,項目會被自動Check-Out(簽出),在項目前面有一個紅色的打鉤表徵圖(下面左圖)
- 其次,新增的檔案前面有一個黃色的+號,表示這是一個掛起修改的檔案(下面右圖)
先把Class1檔案簽入,然後我們試著雙擊開啟Class1.cs檔案,輸入一行注釋,我們發現編輯檔案後,檔案會被自動簽出(Check-Out),由於檔案被Check-Out,所以項目的狀態也更新成Check-Out了:
3、如何與伺服器同步
在團隊協同工作的環境中,許多人都在修改同一個項目中的代碼,你需要把項目中最新的修改下載到本地。如下的操作,可以讓你的工作空間和伺服器上的最新版本同步:
- 在解決方案視窗中,選擇項目或者整個解決方案,右鍵點擊,選擇“擷取最新版本”
- 在原始碼資源管理員中,選擇一個Team Project,可以將該Team 專案的最新版本同步到本地:
如果在中,選擇一個Team Project下的某個解決方案檔案夾,則可以針對某個解決方案擷取最新的版本。
在簽入你自己的代碼前,最好把伺服器上最新的版本同步下來,這個過程需要解決可能的版本衝突問題,然後你要構建項目,保證沒有問題後,再簽入代碼。這是為了盡量避免你簽入的代碼,導致在伺服器和其他開發人員的機器上出現構建失敗。
4、如何做Check-In
以下三種方法都可以做簽入(Check-In)
- 在解決方案視窗中,右鍵點擊修改後的檔案,然後選擇簽入
- 在原始程式碼控制視窗中,右鍵點擊修改後的檔案,然後選擇“簽入掛起的修改”
- 在暫止的變更視窗中,選擇要簽入的檔案後,點擊簽入按鈕:
這種方法可以讓我們做快速的簽入,預設情況下,所有被修改的檔案,都會自動列出,根據需要確定要簽入的檔案後,可以填寫簽入的注釋,對簽入的修改關聯對應的工作項目:
填寫代碼的相關檢閱者:
查看簽入是否已經滿足預定的策略:
當使用者選擇簽入後,所有選中的檔案,簽入提示,以及與此次簽入相關聯的工作項目,都將被儲存到資料庫中,作為一個新的更改集(Changeset)。一個更改集是檔案版本、相關工作項目、以及原始程式碼控制中繼資料(Metadata)組成的一個單獨的實體。
如果工作項目有相關的流程處理規則,這些規則會修改工作項目的狀態。例如,一個團隊可能會定義如下規則:如果當你簽入時管理了工作項目,並選擇“簽入操作”為“解決”,則工作項目會從“活動的”變為“解決”:
5、如何做分支與合并
TFS中支援分支的概念,所謂的分支(Branching),就是指把原始碼控制系統中的檔案和目錄複寫一份。分支能夠保持檔案和目錄的曆史,並且能夠把舊的檔案上的修改合并到新的檔案上去。在新的分支上的修改,和原來的分支(一般稱為主分支)沒有任何關係。
合并(Merging)是指把不同分支中的檔案(檔案、目錄、Team 專案)合并到一起。在合併作業中,一個分支是源分支,另一個是目的分支。源分支中包括了使用者想要合并的檔案。
考慮下面這種情況:
在時間的要求下,我們可能要先發布一個版本,那麼我們可以建立一個Release1的分支,然後主分支代碼和分支代碼同時繼續開發。在某個時刻,可以將兩個分支合并。
下面是分支應用的另一種情境:
在功能細分的要求下,例如Visual Studio就分成好多個版本:Express 版本、標準版本、企業版、架構師版等等。他們擁有共同的基礎功能,在這部分功能開發完成後,可以通過分支來實現不同版本對應增值功能的開發,例如從主代碼中分支出功能A、功能B
也有可能這些增值功能不是必須的,如果可以實現,我們就合并到主代碼中,如果不能實現,則取消合并。
通過上述的情境,可以看到分支為代碼管理提供了更佳的靈活性。
5.1建立分支操作示範
在Visual Studio中進行分支操作,十分方便,首先我們建立一個分支:
- 在原始檔控制總管視窗中,選中一個要對其進行分支的項目,例如的ITRequestFormPrj1,然後右鍵點擊選擇“分支”:
- 在這裡,可以選擇分支的名稱、對主分支的最新版本還是指定版本進行分支,是否建立新分支的本機複本(也就是將新分支從TFS伺服器上下載到本地工作區中)
- 點擊確定按鈕後,開始建立分支的操作,建立成功後,我們在原始檔控制總管視窗中,可以看到主分支和新分支之間有一個雙向箭頭的表徵圖表示了它們的關係:
5.1合并分支操作示範
我們先試著在新的分支中修改一下代碼,然後簽入修改,接下來我們示範合并分支的操作:
- 在原始檔控制總管視窗中,選擇一個分支,將其合并到主分支,右鍵點擊後,選擇“合并”:
- 在原始程式碼控制合并嚮導中,選中的分支作為源分支,目標分支會自動被識別出來:
- 在中,點擊下一步按鈕,嚮導會提示你,選擇源分支的哪個版本進行合并:
點擊完成按鈕,如果合并的分支之間有衝突,則會提示你要先解決衝突後,才能合并:
點擊解決按鈕,提示Form1.cs檔案存在衝突:
點擊比較按鈕,在比較視窗中,會顯示兩個分支中,同一個檔案的差異:
在上一個視窗中,選擇“在合并工具中合并修改”,並點擊確定按鈕:
後台會為你啟動合并工具,需要稍等片刻:
在合并工具中,可以選擇一邊的更改加以應用,如果有多個不一致的地方,則可以通過“上一個更改”和“下一個更改”進行方便的導航:
選擇一個更改的內容後,你還可以在最下面的編輯視窗中,進行最後的修改,然後點擊確定即可:
提示衝突已經解決,是否儲存檔案,點擊是:
當所有衝突都已經解決後,點擊關閉,退出衝突處理,完成合併操作:
這個時候,我們開啟合并的目標分支,因為修改的內容合并到了目標分支,目標分支的對應檔案處於暫止的變更“合并,編輯”,需要對其進行簽入操作,才能將最新的內容提交到TFS伺服器上:
6、什麼是上架與下架
上架(Shelve)和下架(UnShelve)命令聽起來不容易理解。我們不妨相像一下,你正在辦公桌上伏案畫圖,假設是用工筆畫紅樓夢群芳夜宴圖,大大小小的美女草圖鋪滿了案頭,這是你接到命令要做另外一件事:潑墨畫,而你只有一個辦公桌,萬一潑墨到美女們怎麼辦?於是你就把目前的所有圖紙捲起來,放到書架上。這就相當於上架。
接下來你開始潑墨畫的工作。盡情揮灑之後,清理案頭,從書架上把剛才收合的圖紙都拿下來,鋪開,繼續你的群芳夜宴圖。這就相當於下架。
這兩個命令主要用於:
- 儲存目前的工作,切換到另一個任務
- 其他人開始代碼複審(你將修改上架了,別人可以在自己的環境中,把你上架的內容下架,然後做複審)
- 整合別人的修改(兩人的修改互相依賴,這是可以通過上架/下架命令把修改整合起來)
這位多人協作提供一種便利:不需要每次Check-In,然後別人Check-Out,而是多次上架下架後,最後來一次Check-In即可。
上架的操作十分類似於簽入操作,在原始檔控制總管中,右鍵點擊要上架的檔案,選擇“擱置暫止的變更”即可:
所有的參數都與簽入操作類似,不同的是,修改不會做衝突檢查,也不會影響原始碼(即沒有真正被Check-In,這可以在上架操作結束後,驗證檔案前面還有紅色打鉤標誌來確認),而是暫時儲存在TFS伺服器上,以便其他人做下架處理: