[翻譯]微軟是怎樣解決Git在超大代碼庫方面存在的問題的

原文鏈接: https://www.infoq.com/news/2017/02/GVFS
InfoQ翻譯:http://www.infoq.com/cn/news/2017/02/GVFS?utm_source=infoq_en&utm_medium=link_on_en_item&utm_campaign=item_in_other_langs

雖然Git被廣泛認為是最好用的版本管理軟件,但它并不是完美無暇的。它的一些缺陷可以通過第三方的工具來彌補,但微軟公司在嘗試從本地將300GB的代碼倉庫遷移到Git時,卻發現整個代碼倉庫復制的方式存在著致命的問題。為了解決這個難題,微軟自行開發“Git虛擬文件系統”(GVFS)。

在2000年前后那段時間,微軟內部主要使用的是一個名叫Source Depotde 系統,它是Perforce的一個分支。后來越來越多的團隊開始轉向使用TFS中的版本控制軟件TFVC。但那些龐大的團隊卻無法讓所有的人都同時將代碼轉出Source Depot,以及另外一些團隊則在使用TFS的同時,需要通過很多第三方工具和非TFS團隊協作。

為了簡化這樣復雜的工作環境,微軟決定將所有團隊統一成使用Visual Studio Team Services (即云端的TFS)來規劃工作,自動構建以及代碼管理,并選擇了使用在VSTS搭建Git的方案來實現代碼版本控制。

為什么選擇Git?在微軟工作的reddit 用戶 jeremyepling提到了以下三個原因:

1.Git和GitHub幾乎已經提供了開源軟件開發的標準形式。微軟在開源軟件開發中作出了很多嘗試,并且我們也需要像TFS 和Team Service這樣屬于自己的DevOps工具來更好的管理那些工作流程。
2.我們一個獨立的版本控制系統來管理微軟的上上下下。標準化的流程使得大家可以更好的兼顧多個工程并且更專注與開發。由于開源軟件已經和Git緊密聯系,并且我們做了很多開源的工程,這一切讓Git瞬間成為主流。
3.我們想更好得支持開發社區和DevOps用戶。Git對于當前的版本控制系統來說無疑是最主流的。

但這樣還有些問題,Brian Harry 解釋道:

事實上還存在許多反對選擇Git的觀點,其中一個就是懷疑在微軟這樣的代碼規模下,Git未必會有良好的表現。并不是所有的公司都和我們一樣有如此龐大的代碼規模。尤其是Windows和Office這兩個項目,原始代碼體積非常巨大。成千的工程師,上萬的文件,以及持續構建著工程的上千臺機器,實在是難以想象的規模。生命一下,我在這里提到的Windows包括了運行在PC,手機,服務器,HoloLens,Xbox,IOT上的系統。Git作為一個分布式版本管理系統,他會將整個倉庫和所有的歷史操作復制到每個人的本地機器上。對Windows這個工程做這樣的操作實在是有點搞笑(是的我們已經被人笑話過很多次了)。TFVC和Source Depot都小心翼翼地優化這龐大的代碼結構和團隊之間的關系,Git則從來沒有考慮過這樣的問題,所以很多人認為Git并不能正常的應用在這么大的工程上。

將Windows代碼庫拆分成合適大小的子庫并不是特別的合適。也許他們在之前就開始著手拆分的話,現在可能已經成功了。但是在如此龐大和年代救援的代碼面前,再想回到過去并將它拆分已經是不可能的了。Brian繼續道:

這意味著我們必須要增強Git所能處理的規模,讓它可以在現有的代碼和成千上萬的文件讓上千個開發者可以正常工作。話說回來,即便是Source Depot也沒有規模大到直接覆蓋整個Windows代碼庫。它是被分成40多個depots之后,再通過加上一個抽象曾來使得我們在大多數情況下可以將這些堪稱一個整體。然而這樣的抽象并不完美而且也帶了一些問題。

在各種嘗試失敗之后,微軟開始開發Git虛擬文件系統:

我們嘗試用一種方法來將Git虛擬化。一般來說Git會在你克隆代碼庫的時候將所有東西都下載到本地。但如果我們不這么做呢?如果我們將存儲虛擬化,并只下載你所需要的文件呢?這樣克隆一個巨大的300G的代碼庫將變得非常快。當我們使用Git的命令或者讀寫文件時,系統則會從云端將需要的文件下載下來并存儲到本地。不過這樣做的缺點之一是你在斷網的情況下無法正常使用。如果你必須要在這樣的環境下工作,則需要嘗試“觸碰”所有的文件。對于我們這樣巨大的代碼庫,這個方法行之有效。

微軟對Git作出的貢獻

如果想讓GVFS更好的運行,那微軟必須要提升Git在訪問文件方面的性能。早前版本的Git并沒有太在意本地代碼庫的存儲性能,有時會做一些不必要的文件掃描。這就是為什么微軟在前幾年向Git的開源工程中提交了他們的性能提升代碼。

Jeremyepling 寫道:

我們微軟Git團隊已經對Git在Linux、Mac和Windows上的性能提升作出了很多貢獻。在Git的2.10版本中,我們為提升rebase的性能做了很多事,并最終使得它在Windows、MacOSX、Linux上分別提高了5、4、3倍的運行速度。

列舉一些對Git作出的改進:

sha1: 在mingw上使用 openssl sha1 https://github.com/git-for-windows/git/pull/915
preload-index: 對skip-worktree的文件不使用Istat https://github.com/git-for-windows/git/pull/955
memihash perf https://github.com/git-for-windows/git/pull/964
add: 使用 preload-index 和 fscache 來提高性能 https://github.com/git-for-windows/git/pull/971
read-cache: 在后臺線程執行verify_hdr() https://github.com/git-for-windows/git/pull/978
read-cache: 在切換分支時提高 add_index_entry 的速度https://github.com/git-for-windows/git/pull/988
string-list: 使用ALLOC_GROW macro的方式重新為 string_list申請內存 https://github.com/git-for-windows/git/pull/991
diffcore-rename: 加速register_rename_src https://github.com/git-for-windows/git/pull/996
fscache: 在 fscache 中添加not-found路徑的緩存 https://github.com/git-for-windows/git/pull/994

Git Virtual File System

Git Virtual File System (GVFS)的原型實現了一個在客戶端的文件系統和集成了GVFS功能的Git。這可以在十周年甚至更長遠的一段時間內,看作是Windows的最杰出的功能升級。當你的Git代碼庫集成了GVFS之后,普通的Git命令仍然可以正常使用,GVFS則會默默得在文件系統后臺下載你所需要的文件。
GVFS客戶端代碼的開源,可以讓任何人都有機會認識到如何實現一個Windows下的虛擬文件系統驅動。
相對應的,服務端需要實現 GVFS 協議。目前只有Visual Studio Team Services提供這樣的服務。但因為這項服務協議是開源的,所以任何服務提供商都可以實現相應的功能。同時GVFS協議也非常的簡單,只包含了四個類似REST風格的訪問端點。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容