TFS Source Control
用了TFS也好一陣子了,從一開始什麼都不知道到靠自己摸索了一陣子才有所了解
對於寫Code的人來說,有source control 真是太重要了
對於自己經歷過多次測試環境轉正式環境的上線開發,以及多重版本的開發
到多人開發共同開發一套系統,期間更是A開發者蓋到了B開發者的檔案這種混亂的情況
一開始是沒有採用這套工具,一直以來也是人工做source control了幾年才發現那些的苦難都是可以避免減少的
所以就開始著簡單介紹Visual Studio TFS 有什麼樣強力的功能可以幫助你維護你複雜的程式碼
名詞定義區
workspace: 一個workspace可以綁定許多project,而一個project只能同時對應到TFS server上的某一個folder (project, solution)
checkout: 當你的專案綁上solution後,只要檔案有做更改,都會自動簽出
checkin: 當你的程式碼測試完,或是想備份至TFS時,就可以做這個動作讓你的程式碼同步一份至TFS server
undo: 你可以針對某個檔案不小心改到做回復到當初未簽入時的內容
conflict merge: 通常發生於要將檔案checkin至TFS server時,無法用auto merge的演算法搞定時,就需要人工檢視哪些code需要,哪些不要,這是非常方便的工具
changeSet: 當你把多個檔案checkin進去後,TFS會給你一組流水序號,你可以根據這個序號知道當初check-in了哪些檔案
view history: 可以根據某個檔案 (selected file => 右鍵 => view history),或是某個changeSet (solution => 右鍵 => view history) 察看當初的檔案內容,並進行比對內容
Get specific version: 通常是搭配view history確認要哪個版本的資料,再用這個方式將特定版本的資料抓下來,以便測試
Branch: 通常在某一版本已上線穩定後,要進行測試版的功能開發時,就會Branch出一個或多個子版本
Merge: 只有子版本才能往上Merge回去父版本,父版本無法merge至子版本
基本操作區
- 從TFS server抓某一個project回來
先建立workspace後,再edit該workspace的item項目,指定server端與local端的目錄對應關係 (此動作僅限從server下載資料,並不代表可以用一樣的動作上傳綁定source control) - 解除binding
首先必須解除binding: file=> source control => advance => change source control, unbind
再打開workspace後,edit裡面的項目,將不需要的項目remove掉,出現對話視窗要你get最新的資料,請選否,不然你的local資料會被刪除 - 將現有的solution or project 綁上source control
打開現有的solution,建立好所屬的workspace後,在solution explore上按右鍵add solution into source control,即會綁到該對應的workspace的根目錄,未研究若要綁至某個特定資料夾該怎麼做 - 將server的程式抓下修改,不想影響既有的版本,若要開發出自己要的版本,可依照上述1, 2, 3
- Branch & Merge
在source control裡針對要branch的folder按右鍵,選擇branch即可,若要修改Branch的版本,可以使用上述1的方法先將branch版本抓下來,修改完後再針對Branch的版本按右鍵選擇Merge即可,此時可能會出現conflict merge,做完變更後會發現被merged的目標專案在local 被修改了(你必須在local 同時有 parent 跟branch才能做merge),確認merge完成再check in後即可發現parent已修改完成 - 若有出現The item 'xxxx.cs' is already under source control at the selected location. If you are trying to rebind a project that you have already added to source control outside Microsoft Visual Studio, you should use the Change Source Control command. If you are adding this project for the first time, you should either choose a different server folder for the project or move the existing project to a different server folder. 可以檢查一下binding是否還在, file=> source control => advance => change source control 檢查binding是否被取消勾選了
例外處理
即便刪除檔案後check-in,記錄還是會留在TFS裡,若是有不小心簽入的檔案,但要永久移除的話,必須使用tf destroy指令,讓檔案與source control沒有關聯性
- 打開vs tool的命令提示字元
- 請把目錄切換至要刪檔案的目錄(work space)下,在使用切換至D槽
- 輸入以下命令,如果有空白請用雙引號包起來
tf destroy $/”Your collection name”/"your project"/Web/frmLogin.aspx
***若是workspace的mapping relation已經移除,要強制刪除會遇到Unable to determine the source control server,因為該目錄無法mapping回去原本的TFS server路徑,需指定server
tf destroy $/”Your collection name”/"your project"/Web /s:"Your TFS server"
參考資料來源
https://msdn.microsoft.com/zh-tw/library/vstudio/bb399141(v=vs.100).aspx