題記:呵呵,首先聲明,題目起的有點大,其實我只想介紹下VS2013和TFS2013新加入的Git功能,也不是在VS中使用Git的詳細向導(以后有空再詳細分享給大家)。這篇文章雖然在寫這篇文章《Visual Studio 2013 發布正式版及使用感受》的時候,心中就有此打算,后來有朋友回復說讓我介紹一下Git的使用,更是讓我覺得很有必要介紹一下這方面的內容。可惜拖了這么久才開動。
Git是什么
Git是一種近來很流行的版本控制系統(或稱源代碼管理系統),和傳統的SVN、TFVC(TFS Version Control)這樣的系統而言,最大的特點就是分布式。所謂分布式是相對於SVN這種集中式而言的,SVN或者TFVC都需要有一個中心服務器保存着源代碼,所有開發者都使用客戶端和這個服務器交互。
Git是Linux內核之父為了管理繁雜的Linux內核而開發的開源系統,隨着GitHub這樣的開源代碼托管系統大熱,而為很多人知曉使用。
Git的強大潛力並非真正在於分布式,而是在於其對源代碼存儲的機制(使用快照),由於這樣的機制存在,你可以大量頻繁的使用分支來工作,通過分支來隔離功能開發的過程。如果要在TFVC中頻繁建立分支是不可想象的。比如我的一個以前的解決方案文件夾大約600M,如果頻繁使用分支,那么一方面我的磁盤會出現大量重復的文件占用大量的磁盤空間,另外一方面在VS的歷史打開記錄中會有很多名稱一樣的解決方案,你還需要去辨別其所在路徑從而確定是否打開了正確的分支代碼。
由於本篇文章不是專門介紹Git的,所以我不會進一步對Git進行過多介紹。要入門Git,可以查看《git - 簡易指南》這樣的手冊,如果需要深入了解Git,建議精讀《Git - Book》這本書。尤其對於打算把Git引入到團隊的技術負責人更是要深入了解Git,以便做出正確的技術選擇。另外,在開發過程中應用GitFlow也是一種很好的實踐。
而我為什么使用Git,可以在《Visual Studio 2013 發布正式版及使用感受》中找到答案。
Git客戶端:VS2013
由於VS針對源代碼控制本身就提供了擴展接口,所以很早的時候,就有VS中使用Git的集成插件,比如:Git Source Control Provider。
后來微軟提供了官方的Git集成插件:Visual Studio Tools for Git。提供這個插件最初的原因(我猜想)是,由於Git大行其道,導致CodePlex等也不得不支持Git,從而為了更好的支持Git在VS中的使用,微軟就着手開發了這個插件。
這個微軟官方的插件僅支持VS2012 Update 3的安裝,其已經內置於VS2013的所有版本中(包括免費版)。這個工具內置了對於Git基礎命令的操作功能,如果需要更高級的功能,可以安裝第三方Git命令行工具(Git Bash)。同時,我也建議大家一並安裝TortoiseGit這個工具,很多時候使用這個工具更順手。
關於在VS2013中使用Git的詳細文檔,可見:http://msdn.microsoft.com/library/vstudio/hh850437。
VS2013中的Git功能可以連接任意Git服務器實現的。
Git服務器:TFS2013
在解決了Git客戶端和開發工具集成的問題后,就需要解決服務器的問題。既然微軟在CodePlex中都提供了Git支持,那么為何不在TFS中也提供呢,於是就有TFS2013對於Git的支持。Git理論上可以不需要一個服務器的,不過為了團隊更好的協同,還是有必要架設一個中心Git倉庫服務器,供大家pull和push用。而Git服務器有如下幾種選擇:
- GitHub、CodePlex或者CSDN CODE等開源項目托管服務器。GitHub也可以付費來托管閉源項目。
- 可以自己架設。可以使用Git默認的實現,也可以使用一個用ASP.NET MVC 4實現的http://bonobogitserver.com/來架設。
- 使用TFS服務,tfs.visualstudio.com。TFService在TFS2013發布之前(通過使用TFService就可以使用到TFS最新的特性,包括尚未正式發布的),就已經在提供Git的功能。創建團隊項目的時候就可以選擇使用TFVC還是Git,選定后無法更改。
- 架設內部的TFS2013服務器。在TFS2013中直接內置了Git服務器的實現,無需額外安裝任何Git Server,理所當然Git的內容會保存在SQL Server數據庫中。TFS2013的Git實現可以被任意客戶端所連接。同樣也是創建團隊項目的時候可以選擇使用那種源代碼管理方式,選定后無法更改。
Git和分布式團隊協作
在TFS2013針對分布式團隊的特點新增或加強了很多功能,最為顯著的兩個功能就是Git和Team Room。
Git由於具備分布式的特點,可以讓地域不在一起的團隊,更快的提交代碼;每個地域的辦公室也可以維護一個自己的共享庫,讓本地辦公室的同事不同代碼;各個辦公室的代碼也可以通過公司統一的Git服務器來同步。
當然這種分布式的源代碼協作方式由於會在每個開發人員的機器上保存幾乎完整的源代碼庫,雖然可以通過TFS等進行權限控制,但有些企業還是跟傾向於中心式的源代碼管理系統如TFVC,這樣對於代碼可以更好的進行控制。
如果對於一個小型創業團隊。通過使用Git+TFService的話,那么就可以在很自由和免費的環境下工作。比如,小型的創業團隊可能都沒有辦公室,那么只需要去免費申請一個TFService(5個內免費使用),用Git創建工程,用VS2013 Express開發項目,那么大家的代碼、工作進度都可以很好的管理起來。
最后源代碼可以Git分布式了,開發進度也可以用TFS的WorkItem來分布式協作了,甚至團隊交流都可以通過Team Room來分布式進行了。
這里有一些相關文章,可以進行擴展閱讀:
http://blogs.msdn.com/b/bharry/archive/2013/01/30/git-init-vs.aspx
另外,我在TechEd2013的北京、上海站,都會主持敏捷協同開發相關的HOL(動手實驗室)。歡迎大家參加:http://technet.microsoft.com/zh-cn/teched2013_hols