git在面對(duì)大代碼庫(kù)時(shí)型雳,git的操作,比如clone、checkout纠俭、commit等沿量,會(huì)花費(fèi)大量的時(shí)間。GVFS全稱(chēng)Git Virtual File System冤荆,是微軟為了優(yōu)化這種情況而提出的解決方案朴则,微軟已經(jīng)將其開(kāi)源(https://github.com/Microsoft/GVFS )。
1钓简、準(zhǔn)備編譯環(huán)境
按照github上面的指導(dǎo)乌妒,安裝各種環(huán)境就可以啦~
體驗(yàn)GVFS需要Windows 10版本1703或者更高。不然在執(zhí)行exe文件的時(shí)候會(huì)報(bào)以下錯(cuò)誤外邓,別問(wèn)我怎么知道的撤蚊。。损话。侦啸。
2、編譯
下了代碼丧枪,打開(kāi)GVFS.sln光涂,發(fā)現(xiàn)GVFS編譯不過(guò)了。
問(wèn)題
出錯(cuò)日志如下:
嚴(yán)重性 代碼 說(shuō)明 項(xiàng)目 文件 行 禁止顯示狀態(tài)
錯(cuò)誤 CS0006 未能找到元數(shù)據(jù)文件“C:\my_work\GVFS-master\..\BuildOutput\GVFS.GvFltWrapper\bin\x64\Debug\GVFS.GvFltWrapper.dll” GVFS.GVFlt C:\my_work\GVFS-master\GVFS\GVFS.GVFlt\CSC 1 活動(dòng)的
嚴(yán)重性 代碼 說(shuō)明 項(xiàng)目 文件 行 禁止顯示狀態(tài)
錯(cuò)誤 CS0006 未能找到元數(shù)據(jù)文件“C:\my_work\BuildOutput\GVFS.GVFlt\bin\x64\Debug\GVFS.GVFlt.dll” GVFS.Mount C:\my_work\GVFS-master\GVFS\GVFS.Mount\CSC 1 活動(dòng)的
嚴(yán)重性 代碼 說(shuō)明 項(xiàng)目 文件 行 禁止顯示狀態(tài)
錯(cuò)誤 CS0006 未能找到元數(shù)據(jù)文件“C:\my_work\BuildOutput\GVFS.Mount\bin\x64\Debug\GVFS.Mount.exe” GVFS.Service C:\my_work\GVFS-master\GVFS\GVFS.Service\CSC 1 活動(dòng)的
嚴(yán)重性 代碼 說(shuō)明 項(xiàng)目 文件 行 禁止顯示狀態(tài)
錯(cuò)誤 CS0006 未能找到元數(shù)據(jù)文件“C:\my_work\BuildOutput\GVFS.GVFlt\bin\x64\Debug\GVFS.GVFlt.dll” GVFS C:\my_work\GVFS-master\GVFS\GVFS\CSC 1 活動(dòng)的
嚴(yán)重性 代碼 說(shuō)明 項(xiàng)目 文件 行 禁止顯示狀態(tài)
錯(cuò)誤 CS0006 未能找到元數(shù)據(jù)文件“C:\my_work\BuildOutput\GVFS.Mount\bin\x64\Debug\GVFS.Mount.exe” GVFS C:\my_work\GVFS-master\GVFS\GVFS\CSC 1 活動(dòng)的
嚴(yán)重性 代碼 說(shuō)明 項(xiàng)目 文件 行 禁止顯示狀態(tài)
錯(cuò)誤 CS0006 未能找到元數(shù)據(jù)文件“C:\my_work\BuildOutput\GVFS.Service\bin\x64\Debug\GVFS.Service.exe” GVFS C:\my_work\GVFS-master\GVFS\GVFS\CSC 1 活動(dòng)的
嚴(yán)重性 代碼 說(shuō)明 項(xiàng)目 文件 行 禁止顯示狀態(tài)
錯(cuò)誤 C2220 警告被視為錯(cuò)誤 - 沒(méi)有生成“object”文件 GVFS.GvFltWrapper C:\my_work\packages\Microsoft.GVFS.GvFlt.0.17627.2-preview\header\gvlib.h 749
嚴(yán)重性 代碼 說(shuō)明 項(xiàng)目 文件 行 禁止顯示狀態(tài)
警告 C4819 該文件包含不能在當(dāng)前代碼頁(yè)(936)中表示的字符拧烦。請(qǐng)將該文件保存為 Unicode 格式以防止數(shù)據(jù)丟失 GVFS.GvFltWrapper C:\my_work\packages\Microsoft.GVFS.GvFlt.0.17627.2-preview\header\gvlib.h 749
解決
因?yàn)槲沂侵形沫h(huán)境的原因忘闻。參考(https://github.com/Microsoft/GVFS/issues/8 ),
將 gvlib.h用Notepad++轉(zhuǎn)為UTF-8格式屎篱,然后保存即可編譯通過(guò)服赎。
3、安裝GVFS專(zhuān)用的git for windows客戶端
這是最困難的一步了交播。重虑。。秦士。下載好慢好慢缺厉,然后下載失敗。隧土。提针。
4、測(cè)試
需要在VS online上面注冊(cè)一個(gè)賬號(hào)曹傀,在上面新建個(gè)項(xiàng)目辐脖,才能使用GVFS。比如我創(chuàng)建了一個(gè)倉(cāng)庫(kù)皆愉,倉(cāng)庫(kù)的地址是: https://gxchenqiang.visualstudio.com/_git/test_project
在倉(cāng)庫(kù)的根目錄上新建一個(gè)名為.gitattributes
的文件嗜价,文件內(nèi)容為* -text
執(zhí)行編譯出來(lái)的SetupGVFS.exe艇抠,然后運(yùn)行g(shù)it bash,執(zhí)行:
gvfs clone https://gxchenqiang.visualstudio.com/_git/test_project gvfs_clone_test
打印以下信息久锥,說(shuō)明clone成功啦家淤!
再看看gvfs_clone_test目錄下瑟由,src中才是你項(xiàng)目中的代碼
5絮重、原理
一個(gè)巨大的代碼庫(kù),實(shí)際上開(kāi)發(fā)者在開(kāi)發(fā)的時(shí)候只用到一部分文件歹苦,如果把所有的文件都下載下來(lái)青伤,那就做了太多無(wú)用功啦。GVFS在clone代碼的時(shí)候暂氯,看起來(lái)像是把所有的文件都clone下來(lái)了潮模,實(shí)際上只clone了整個(gè)倉(cāng)庫(kù)的元數(shù)據(jù),文件的內(nèi)容并沒(méi)有下載下來(lái)痴施,等開(kāi)發(fā)者用到某個(gè)文件的時(shí)候擎厢,GVFS才會(huì)把文件的內(nèi)容下載到本地。所以GVFS的clone辣吃、checkout等操作就會(huì)快很多啦动遭!