我一直在思考分支策略(根据特性创建分支,也许是根据开发人员,因为我们是一个小组),想知道是否有人遇到任何问题。创建分支会占用多少空间?
我上次看到的时候,TFS 使用了写时复制技术,这意味着只有在你更改文件后才会增加磁盘空间。这有点像使用符号链接直到你需要更改内容。
詹姆斯的说法基本上是正确的。为了得到更完整的答案,我们需要从2006年Buck的帖子开始:http://blogs.msdn.com/buckh/archive/2006/02/22/tfs_size_estimation.aspx
每个本地版本表中的新行大约增加520字节(每个获取新添加项的工作区都会添加一行,大小由本地路径列主导)。如果有100个工作区获取新添加的项,则数据库将增长52 KB。如果添加了1,000个平均大小的新文件(源文件、二进制文件、图像等的混合)并且有100个工作区获取它们,则版本控制数据库的大小增长约为112 MB(60 KB * 1,000 + 520 * 1,000 * 100)。
我们可以省略60KB的数字,因为分支项目不会重复文件内容。(这不完全是“写时复制”,詹姆斯——在分支操作本身期间必须计算和存储O(N)数量的元数据,而不是像Git这样的系统,我认为分支是在O(1)时间内完成的——但您正确指出,新项目指向tbl_Content中与源项目相同的记录,直到进行编辑为止)。这只留下了520 * num_workspaces * files_per_workspace
这个因素。在MS的dogfood服务器上,tbl_LocalVersion中有大约20亿行,但在一个自称小团队中,它应该是微不足道的。
Buck的博客没有提到合并历史记录。如果您采用分支密集型工作流程,并通过几个开发周期坚持使用它,tbl_MergeHistory的大小可能会增长几乎与tbl_LocalVersion一样大。同样,我怀疑它甚至不会在小团队的雷达上显示,但在大型安装中,您可以轻松积累数亿行。话虽如此,每行要小得多,因为没有nvarchar(260)字段。