我一直在考虑一些分支策略(为每个功能创建分支,也许是每个开发人员,因为我们是一个小团队)并且想知道是否有人遇到过任何问题。创建一个分支会占用很多空间吗?
2 回答
上次我查看时,TFS 使用写时复制,这意味着在更改文件之前不会增加磁盘空间。这有点像在需要更改之前使用符号链接。
詹姆斯基本上是正确的。要获得更完整的答案,我们需要从 Buck 2006 年的帖子开始: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 的数字,因为分支项不会重复文件内容。(这并不完全是“写时复制”,James - 必须在分支操作本身期间计算和存储 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) 字段。