由于現(xiàn)在的很多開(kāi)發(fā)團(tuán)隊(duì)變得越來(lái)越分散,類(lèi)似微軟的Visual SourceSafe和Team Foundation Server這樣的集中式源代碼控制系統(tǒng)很快就失去了吸引力。在這種情況下,很多開(kāi)發(fā)人員轉(zhuǎn)而使用分布式源代碼控制系統(tǒng)。在.NET開(kāi)發(fā)人員當(dāng)中,最流行的一款莫過(guò)于Git,它最初由Linus Torvalds為L(zhǎng)inux內(nèi)核開(kāi)發(fā)而創(chuàng)建。
使用Git的一個(gè)問(wèn)題就是,大部分功能要通過(guò)命令行來(lái)操作。而.NET開(kāi)發(fā)人員更習(xí)慣于使用用戶(hù)界面,所以在進(jìn)行日常任務(wù)的時(shí)候不得不離開(kāi)IDE的界面,確實(shí)讓人很不爽。這也就是為什么孫以義的Git Source Control Provider(Git源代碼控制提供器)成為采用Git的一個(gè)重要條件的原因。孫以義寫(xiě)到:
作為一個(gè)Visual Studio用戶(hù),我希望在解決方案管理器中看到文件的源代碼控制狀態(tài)。否則我不會(huì)覺(jué)得這些文件正在被某個(gè)源代碼管理系統(tǒng)所控制。在使用SourceSafe、Team Foundation Server、Subversion或甚至Mercurial的過(guò)程中,我們已經(jīng)非常習(xí)慣這種方式了。在使用Git的時(shí)候,我們也希望得到類(lèi)似的體驗(yàn)。在互聯(lián)網(wǎng)上我沒(méi)有找到任何有用的東西,所以只好決定自己弄一個(gè)。
基本想法就是顯示Git文件狀態(tài),并讓整個(gè)體驗(yàn)和VSS和TFS盡可能接近。我讓已簽入(已提交/已跟蹤)的文件依舊顯示藍(lán)色的鎖定圖標(biāo),為已編輯的文件顯示紅色勾選圖標(biāo)。也添加了兩種新圖標(biāo),黃色的加號(hào)和“i”狀圖標(biāo)。它們分別代表新建和登臺(tái)(Staged)狀態(tài)。這兩個(gè)特殊類(lèi)型的圖標(biāo)只是Git所獨(dú)有。
使用這個(gè)插件打開(kāi)Git所控制的解決方案,根據(jù)文件所處的是新建、已簽入、已編輯和待登臺(tái)的狀態(tài),而被清楚地進(jìn)行不同標(biāo)記。當(dāng)前的Git分支名稱(chēng)也會(huì)顯示出來(lái),以便提醒你是否工作在正確的分支上。源代碼控制的感覺(jué)又回來(lái)了。
對(duì)于Visual Studio用戶(hù)而言,有兩個(gè)源代碼控制相關(guān)的功能是非常方便的,我也決定一并實(shí)現(xiàn)。它們是“和最后提交的版本進(jìn)行文件比較”和“回滾文件變更(從最后提交的版本恢復(fù)文件)”。
這是一個(gè)令人激動(dòng)的起點(diǎn)。我或許把它弄得有點(diǎn)花哨了,F(xiàn)在,我開(kāi)始考慮,為什么我應(yīng)該點(diǎn)右鍵來(lái)啟動(dòng)Git的命令行,并輸入git init來(lái)創(chuàng)建新的本地代碼庫(kù)呢?我就不能僅僅點(diǎn)右鍵就選擇初始化一個(gè)新代碼庫(kù)嗎?
至少目前,這個(gè)插件還沒(méi)有打算代替或重復(fù)Git本身或Git Extensions這樣工具的功能。類(lèi)似查看歷史、簽入/簽出、轉(zhuǎn)換分支將會(huì)依賴(lài)于Git Bash和Git Extensions的功能。最后,我將會(huì)很小心地添加一些常用的功能,比如init和commit等功能,不過(guò)通往Git和Git Extensions的大門(mén)就此打開(kāi)了。
在問(wèn)及Git是否可代替TFS來(lái)使用時(shí),孫以義說(shuō)這并無(wú)必要。“雖然TFS的源代碼控制不如Git這樣先進(jìn),但如若需要進(jìn)行應(yīng)用程序開(kāi)發(fā)生命周期管理的話(huà),TFS還是應(yīng)該采用的。TFS對(duì)于包括開(kāi)發(fā)人員、PM、BA和QA的整個(gè)團(tuán)隊(duì)很有用處。”他繼續(xù)談到:
如果諸如靈活的分支、合并以及脫機(jī)開(kāi)發(fā)這樣的現(xiàn)代源代碼控制特性確實(shí)需要的話(huà),我當(dāng)然就推薦大家使用Git。不過(guò)要知道,用TFS來(lái)進(jìn)行ALM,而用Git來(lái)代替源代碼控制功能,還沒(méi)有辦法保證源代碼控制的簽入和WIT(TFS工作項(xiàng))集成在一起。同時(shí),Visual Studio對(duì)Git的工具支持也幾乎是空白。