git在面对大代码库时,git的操作,比如clone、checkout、commit等,会花费大量的时间。GVFS全称Git Virtual File System,是微软为了优化这种情况而提出的解决方案,微软已经将其开源(https://github.com/Microsoft/GVFS )。
1、准备编译环境
按照github上面的指导,安装各种环境就可以啦~
体验GVFS需要Windows 10版本1703或者更高。不然在执行exe文件的时候会报以下错误,别问我怎么知道的。。。。
2、编译
下了代码,打开GVFS.sln,发现GVFS编译不过了。
问题
出错日志如下:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 CS0006 未能找到元数据文件“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 活动的
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 CS0006 未能找到元数据文件“C:\my_work\BuildOutput\GVFS.GVFlt\bin\x64\Debug\GVFS.GVFlt.dll” GVFS.Mount C:\my_work\GVFS-master\GVFS\GVFS.Mount\CSC 1 活动的
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 CS0006 未能找到元数据文件“C:\my_work\BuildOutput\GVFS.Mount\bin\x64\Debug\GVFS.Mount.exe” GVFS.Service C:\my_work\GVFS-master\GVFS\GVFS.Service\CSC 1 活动的
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 CS0006 未能找到元数据文件“C:\my_work\BuildOutput\GVFS.GVFlt\bin\x64\Debug\GVFS.GVFlt.dll” GVFS C:\my_work\GVFS-master\GVFS\GVFS\CSC 1 活动的
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 CS0006 未能找到元数据文件“C:\my_work\BuildOutput\GVFS.Mount\bin\x64\Debug\GVFS.Mount.exe” GVFS C:\my_work\GVFS-master\GVFS\GVFS\CSC 1 活动的
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 CS0006 未能找到元数据文件“C:\my_work\BuildOutput\GVFS.Service\bin\x64\Debug\GVFS.Service.exe” GVFS C:\my_work\GVFS-master\GVFS\GVFS\CSC 1 活动的
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2220 警告被视为错误 - 没有生成“object”文件 GVFS.GvFltWrapper C:\my_work\packages\Microsoft.GVFS.GvFlt.0.17627.2-preview\header\gvlib.h 749
严重性 代码 说明 项目 文件 行 禁止显示状态
警告 C4819 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失 GVFS.GvFltWrapper C:\my_work\packages\Microsoft.GVFS.GvFlt.0.17627.2-preview\header\gvlib.h 749
解决
因为我是中文环境的原因。参考(https://github.com/Microsoft/GVFS/issues/8 ),
将 gvlib.h用Notepad++转为UTF-8格式,然后保存即可编译通过。
3、安装GVFS专用的git for windows客户端
这是最困难的一步了。。。。下载好慢好慢,然后下载失败。。。
4、测试
需要在VS online上面注册一个账号,在上面新建个项目,才能使用GVFS。比如我创建了一个仓库,仓库的地址是: https://gxchenqiang.visualstudio.com/_git/test_project
在仓库的根目录上新建一个名为.gitattributes
的文件,文件内容为* -text
执行编译出来的SetupGVFS.exe,然后运行git bash,执行:
gvfs clone https://gxchenqiang.visualstudio.com/_git/test_project gvfs_clone_test
打印以下信息,说明clone成功啦!
clone成功!再看看gvfs_clone_test目录下,src中才是你项目中的代码
目录结构5、原理
一个巨大的代码库,实际上开发者在开发的时候只用到一部分文件,如果把所有的文件都下载下来,那就做了太多无用功啦。GVFS在clone代码的时候,看起来像是把所有的文件都clone下来了,实际上只clone了整个仓库的元数据,文件的内容并没有下载下来,等开发者用到某个文件的时候,GVFS才会把文件的内容下载到本地。所以GVFS的clone、checkout等操作就会快很多啦!
网友评论