Tal*_*esh 10 svn version-control performance culture
我在svn:30Gb中继承了一个超过30万个文件的单个项目.大量的二进制文件主要存在于图像文件夹中.更新整个项目等操作可能会非常缓慢.
该团队已经发展了一个流程,只对他们正在处理的特定文件夹运行更新/切换,并最终检查损坏的代码,因为"它可以在我的计算机上运行".任何一个人的工作副本都可以包含过时的代码,切换的代码和遗忘 - 从未提交过的代码.此外,发生最小的分支.
我的个人解决方案是每天凌晨5点发布一个小的bash checkout/build脚本,但并不是每个人都有命令行勇气甚至复制我的解决方案,而宁愿选择toverise svn和破坏过程.
有没有人试图调整这么大的存储库并提供建议?我是否可以使用最佳实践来处理大型存储库,以便让每个人都能轻松应对?
PS externals似乎不是一个好主意,SVN优化以保持大型存储库响应不适用于此,因为我正在处理单个项目
PPS目前正在研究这个问题:http://www.ibm.com/developerworks/java/library/j-svnbins.html
首先,在客户端和服务器上升级到SVN 1.6.在最新版本的笔记何况对于大文件(r36389)的加速.
其次,如果您必须在工作副本中使用整个项目,但使用稀疏目录,这可能不适合您.我们为大型仓库执行此操作,客户端所做的第一件事就是仅检查顶级目录,然后获取更多数据,使用repo浏览器转到所需目录并在其上"更新到此版本".它在TortoiseSVN上运行得非常好.1.6还有'reduce depth'选项来删除不再需要处理的目录.
如果这不适合您,您仍然可以对部分工作副本进行更新.你拥有的文件越多,更新速度就越慢(在Windows上,NTFS似乎特别差,用于更新的锁定策略.Bert Huijben注意到这一点,并建议修复 - 使用1.7版本的TBA,但你可以重建你的当前代码与他的'快速修复'.
另一种方法是更改你的文件系统,如果你可以重新格式化,你可以尝试使用ext2 IFS驱动程序,但我相信你会对此保持谨慎!
最后一个选项 - 关闭.svn firectories的病毒扫描程序,以及服务器上的存储库.如果您在服务器上运行Apache,请确保您在短时间内保持活动状态(以防止重新进行身份验证).同时关闭工作副本目录和卷影副本的索引.(最后一点没什么用,但是你可能会看到我做的更好的改进,在服务器上关闭AV可以提高我的SVN响应10倍).
我们有两个存储库,一个用于我们的代码(经常更改),另一个用于我们的二进制数据(非常大,很少更改)。有时这很痛苦,但在处理代码时值得更快的速度。
我们还有一个 Ruby 脚本,我们称之为“每日更新”,签入我们的存储库,我们每天早上通过 Windows 计划任务在我们所有的开发 PC 上启动。它将两个结帐都更新到最新版本,然后在本地构建所有内容,因此我们早上一到就准备好了。
有一些小问题我们还没有解决——例如,当我们的自动化测试运行时,他们检出代码和检出数据之间目前存在延迟,所以当我们提交对两个存储库的更改时,CI 服务器有时会获取旧代码和新数据,从而导致测试失败。
当我们提交对数据存储库的更改时,我们通常只是告诉其他人他们需要更新(我们都坐在同一个房间)。否则,我们通常不会手动更新数据;我们只是让每日更新脚本保持新鲜。