我一直在考虑一些分支策略(每个功能创建分支,也许每个开发人员,因为我们是一个小组),并且想知道是否有人遇到过任何问题。创建分支会占用太多空间吗?
答案 0 :(得分:13)
上次我看,TFS使用copy-on-write,这意味着在更改文件之前不会增加磁盘空间。这有点像使用符号链接,直到你需要改变它为止。
答案 1 :(得分:5)
本地版本表中的每个新行添加大约520个字节(为每个获取新添加项的工作空间添加一行,并且大小由本地路径列支配)。如果您有100个工作区来获取新添加的项目,则数据库将增长52 KB。如果您添加1,000个平均大小的新文件(源文件,二进制文件,图像等的混合)并有100个工作区获取它们,版本控制数据库增长大约112 MB(60 KB * 1,000 + 520 * 1,000 * 100)
我们可以省略60KB数字,因为分支项目不重复文件内容。 (这不是“写入时复制”,詹姆斯 - 必须在分支操作本身期间计算和存储O(N)数量的元数据,而不像我认为在O(1)中分支的git这样的系统 - 但是你是对的,新项目指向tbl_Content中与源项目相同的记录,直到它被编辑完成。这让我们只有520 * num_workspaces * files_per_workspace
因素。在MS dogfood服务器上,tbl_LocalVersion中有20亿行,但在一个自我描述的小组中,它应该完全可以忽略不计。
Buck的博客没有提到的是合并历史。如果你采用分支繁重的工作流程并坚持几个开发周期,那么tbl_MergeHistory可能会增长到几乎与tbl_LocalVersion一样大。同样,我怀疑它甚至会在小型团队的雷达上注册,但在大型安装中,您可以轻松地聚集数亿行。也就是说,每行都要小得多,因为没有nvarchar(260)字段。