1. 為何Google、微軟、華為將億級源代碼放一個倉庫
作者 | 夕顏
編輯 | Just
出品 | AI 科技 大本營(ID:rgznai100)
大公司應該如何進行代碼管理?微軟研發並採用 VFS For Git 的過程和這個系統本身有哪些可以借鑒的地方?為了更深入了解 VFS For Git 和代碼管理相關問題,AI 科技 大本營(ID:rgznai100)采訪了微軟亞洲研究院首席研發經理鄒欣,他對這些問題進行了解答。
為什麼要做 VFS For Git?
鄒欣回憶,在將代碼遷移到 GVFS 前,微軟曾使用多個主要的代碼管理平台,包括 SLM, Source Depot (上世紀 90 年代開始)、TFS 的源代碼控制 TFVC (2006 年開始)。直到 2017 年,微軟用三個月的時間完成代碼遷移到 Git,並推出了 Git 的變種,針對特大 repo 的 GVFS,並沿用至今。
GVFS 是一個 Git 虛擬文件系統,全稱為 Git Virtual File System,允許 Git 處理 TB 規模的代碼庫,比如 270 GB 的 Windows 代碼庫。GVFS 的 V 就是 Virtual(虛擬),它解決了Git 原來的設計缺陷(每個客戶端都有所有版本的代碼),而是用虛擬文件來代替那些本地用不著的文件, 大大 減少了文件傳輸和本地機器存儲的壓力,讓微軟內部技術人員可以進行高效協作。
一段小插曲是,GVFS 從發布之初就引起了爭議,原因是 GNOME 項目的虛擬文件系統也叫 GVfs,而 GNOME 的 GVfs 最早發布於 2006 年,之後的教程、文檔、論壇都沿用這個名字。在微軟的 GVfs 項目發布後,很快超過了 Gnome GVfs 項目的搜索排名,且由於二者都與虛擬文件系統有關,導致用戶在查找信息時容易出現混淆。於是,很多開發者要求微軟改名,經過一番周折後,微軟終於在 2018 年將 "GVFS" 項目的名字改為 "VFS For Git"。
鄒欣表示,當時微軟將代碼遷移到 Git 主要是為了統一微軟百花齊放的內部工具,並沒有一個絕對好的選擇,領導團隊選擇了 Git, 但從現在的結果來看,這是一個比較好的選擇。如今,微軟仍然在對 Git 系列的工具做改進,也把改進回饋到 Git 社區。
現在,VFS For Git 已經是微軟內部統一的工具,同時被其他大型企業採用:https://vfsforgit.org/
VFS For Git 在 GitHub 上也已開源:
GitHub開源地址:https://github .com /microsoft/VFSForGit
除了微軟,我們發現,很多大公司的代碼託管已經向自己內部開發的版本控制系統遷移,比如 Google 就把使用不同語言編寫的超過 10 億文件,近百 TB 源代碼都存放在自行開發的版本管理系統 Piper 中,只當項目開源且需要外部協作時,才會使用業界流行的 Git。(詳見文章《為何Google將幾十億行源代碼放在一個倉庫?》)
再如華為的內源(Inner Source)平台,承載著華為 1100 億源代碼、60 萬+ 代碼倉庫、每天 60 T 的下載容量、1 萬次/秒的 高峰 並發下載。
這是否說明在大公司中流行的單一倉庫就是最好的做法? 這些公司在選擇採用代碼託管方式時需要考慮哪些不同的問題?
鄒欣解釋,在他看來,用 GVFS 也可以創建各種獨立的倉庫。用一套工具有利於公司內部進行代碼共享,讓人員流動、代碼復審、改進工具變得更簡單,效率提高。
其次,大公司有很大量的代碼,很長的 歷史 和很多工具,如果貿然選擇一個新工具就會出現以下問題:
a) 一些市面上的工具並不是為大規模代碼設計的,處理不了大量代碼, 我們以前用第三方的代碼分析工具, 結果處理 Office 的代碼的時候,自己崩潰了,因為 Office 的代碼量太大,這個工具的開發者沒有為如此大的代碼設計軟體。
b) 很多工具在 歷史 中不斷演化, 有自己獨特的特點,很多和企業內部的某些特殊需求有關,外部工具很難都實現這樣的功能。
很多工具聯合在一起,會形成了一個工具的生態,但如果只改變一個工具,讓其他的工具變得不兼容, 那整個團隊的很多工作流就會出現問題。
此外,鄒欣表示,代碼託管與 AI 結合是未來發展方向。例如,這種結合會告訴你昨天晚上簽入代碼有問題, 或者簽入代碼和某個其他團隊的代碼相似,建議重用。或者告訴你簽入的代碼是從網上拷貝來的, 而且把原來代碼中的 bug 也拷貝過來了。
最後,AI 科技 大本營引用此前微軟雲開發服務副總裁 Brian Harry 於 2017 年發表的一篇博文內容,在微軟推出 VFS For Git 三個月後,他分享了該平台的更多細節及其未來目標,包括擴大開放源代碼並改善其在 Microsoft 上的運行表現,想要了解 VFS For Git 更詳細的信息,不妨仔細研讀一下這篇文章:
每日檢出量
https://devblogs.microsoft .com /bharry/the-largest-git-repo-on-the-planet/
2. 哦,是這樣嗎那我現在有二級域名的源碼。怎麼來實現用一級域名的地址就可以實現之前二級域名的效果
域名和源碼是不同的二個概念,域名是在網路中確定訪問的IP地址的,而源碼是網站網頁的編程代碼。
源碼不論在一級域名還是二級域名、三級域名都是編程代碼,可以不變的;而域名是代表你訪問網頁的 IP 地址的,你如果有一級域名,將源碼放在空間,在空間連接你的一級域名即可。
3. 源碼是什麼意思啊
源碼指編寫的最原始程序的代碼。
用戶平時使用軟體時就是程序把「源碼」翻譯成我們可直觀的形式表現出來供用戶使用的。任何一個網站頁面,換成源碼就是一堆按一定格式書寫的文字和符號。
源碼主要功用
1、生成目標代碼,即計算機可以識別的代碼。
2、對軟體進行說明,即對軟體的編寫進行說明。為數不少的初學者,甚至少數有經驗的程序員都忽視軟體說明的編寫,因為這部分雖然不會在生成的程序中直接顯示,也不參與編譯。
但是說明對軟體的學習、分享、維護和軟體復用都有巨大的好處。因此,書寫軟體說明在業界被認為是能創造優秀程序的良好習慣,一些公司也硬性規定必須書寫。
(3)一級源碼擴展閱讀:
計算機裡面運行的所有東西都是用程序編出來的,而編寫程序要用到計算機語言,用計算機語言直接編出來的程序就叫源碼,比如用VisualBasic編寫的源碼文件一般為.bas文件,而用C++編寫的一般為.cpp文件,源代碼不能直接運行,必須編譯後才能運行。源碼經過編譯處理後就可以直接在操作系統下運行了。
從字面意義上來講,源文件是指一個文件,指源代碼的集合.源代碼則是一組具有特定意義的可以實現特定功能的字元(程序開發代碼)。「源代碼」在大多數時候等於「源文件」。