去年,有一個非常令人驚訝的事情,就是微軟宣布將使用Git版本控制系統進行Windows開發。為了實現這一目標,微軟不得不修改Git來處理Windows開發的需求,并且將這些需求上傳上去并集成到標準的Git客戶端中。
目前,這個計劃貌似進展得比較順利。16日,微軟公司宣布GitHub正在積極進行修改,兩家公司將攜手為MacOS和Linux帶來合適的客戶端。
由于Git的特殊性,微軟更希望轉移到Git上,但是轉型卻面臨著三個問題,首先,Git并不是為廣大開發人員設計的,超過2萬人在開發代碼庫。其次,Git并不是針對如此廣大的代碼庫設計的,無論是每個文件的文件數量和版本歷史數量,還是純粹的大小,都超過了300GB。第三,使用標準的Git時,源代碼庫的速度慢得簡直令人無法接受,一些常見操作(如檢查哪些文件已被修改)可能就需要幾分鐘。
該公司的解決方案是開發Git虛擬文件系統(GVFS)。使用GVFS,Git存儲庫的本地副本被虛擬化,使其包含元數據以及僅顯式檢索的源代碼文件。通過消除復制每個文件的需要,存儲庫的磁盤占用空間和使用速度大大提高。微軟修改了Git來處理虛擬文件系統。客戶端被改變了,這樣它就不會不必要地嘗試訪問本地不可用的文件,并且添加了一個新的傳輸協議來選擇性地從遠程存儲庫中檢索單個文件。
通過內部測試,這個做法是成功的,今年5月Windows開發大幅遷移到了Git。但是,Git社區是否有了變化呢?
微軟表示,到目前為止,大約一半的修改已經被上游接受,上游的Git開發者普遍贊同公司采取的改進軟件擴展的方法。 Redmond還表示,愿意改變其方法來滿足上游Git的需求。其中最大的復雜性在于,Git對兼容性采取了非常保守的方法,要求存儲庫在各個版本之間保持兼容。
GitHub對此表現出興趣和參與感是由企業客戶的需求所驅動的。開源,免費的GitHub托管并不需要微軟所做的擴展工作,所以對于Git用戶來說,現在的Git必須足夠好,足以滿足開發過程。在付費企業方面,情況會有些不同。某些行業有大量的存儲庫,這會給Git帶來問題,例如,游戲存儲庫通常很大,這不是因為它們擁有數百萬個文件和數十年的歷史,而是因為它們有大量的圖形和其他資源。而微軟對Git所做的擴展改進對于這種大型的存儲庫也是有用的。因此,在GitHub上所做的改進有助于更好地服務于企業。
同樣,微軟本身也有類似的企業需求,例如西門子希望從Team Foundation Server版本控制轉移到使用Git。但是,只有在規模擴大之后,Git才能更好地發揮效果,目前的規模使用TFS版本控制效果更好。
顧名思義,GVFS需要一個文件系統驅動程序才能工作。Windows部門與工程團隊合作,為Windows添加功能以提高效率,并最終將此功能轉換為受支持的可擴展API,在某些時候移動新的OneDrive占位符等系統以使用相同的API。
微軟和GitHub也正在努力為其他平臺帶來類似的功能,首先會是macOS,接下來是Linux。在這兩個系統上執行此操作的方法是使用FUSE,這是一種構建以用戶模式而不是內核模式運行的文件系統的基礎結構(因為用戶模式開發比內核模式更簡單,更安全)。但是結果發現FUSE的速度還不夠快,通過Dropbox開發類似功能Project Infinite中學到一些東西,目前,采用Kauth(或KAuth)的macOS可擴展性機制將是最好的選擇。