Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 单个大型SVN项目的最佳实践_Performance_Svn_Version Control_Culture - Fatal编程技术网

Performance 单个大型SVN项目的最佳实践

Performance 单个大型SVN项目的最佳实践,performance,svn,version-control,culture,Performance,Svn,Version Control,Culture,我在svn:30Gb中继承了一个超过300000个文件的项目。里面有很多二进制文件,主要是在一个images文件夹中。更新整个项目这样的操作可能会非常缓慢 团队已经发展了一个流程,只在他们正在处理的特定文件夹上运行更新/切换,并最终检查损坏的代码,因为“它在我的计算机上工作”。任何一个人的工作副本都可能包括过期代码、切换代码和被遗忘的永不提交的代码。此外,发生最小分支 我的个人解决方案是每天早上5点编写一个小的bash签出/构建脚本,但是并不是每个人都有足够的勇气复制我的解决方案,更愿意使用龟甲

我在svn:30Gb中继承了一个超过300000个文件的项目。里面有很多二进制文件,主要是在一个images文件夹中。更新整个项目这样的操作可能会非常缓慢

团队已经发展了一个流程,只在他们正在处理的特定文件夹上运行更新/切换,并最终检查损坏的代码,因为“它在我的计算机上工作”。任何一个人的工作副本都可能包括过期代码、切换代码和被遗忘的永不提交的代码。此外,发生最小分支

我的个人解决方案是每天早上5点编写一个小的bash签出/构建脚本,但是并不是每个人都有足够的勇气复制我的解决方案,更愿意使用龟甲svn和中断的过程

有没有人尝试过调整这么大的存储库并提供建议? 我是否可以实施任何最佳实践来处理大型存储库,使每个人都能轻松地使用这些存储库

p.S.externals似乎不是一个好主意,也不适用于这里,因为我只处理一个项目


这是目前正在研究的:

< P>处理笨重的大小,我会考虑将二进制数据分割成另一个分支(或者甚至完全删除它以存储在别处),与代码分开。这至少可以加快速度,尤其是在数据不经常更改的情况下


我理解人们需要为他们的工具、数据和库设置一个中心位置,但只有一个转储并不好。

在类似情况下,我是一名SCM经理。我们有一个项目,有超过20万个文件(大部分是代码),其中也有一些相同的问题。我们的解决方案是将存储库分为两个版本。一个版本是开发版本,另一个是生产版本。我们在开发版本中植入了所有代码的最新和最伟大的工作副本。开发人员从这一点开始,并进行更改、签入/签出等。一旦他们觉得事情稳定,管理员(在我们的案例中是构建经理)就会合并代码并进行测试构建,以验证一切工作是否正常。如果一切顺利,那就好了。如果没有,构建管理员将追捕开发人员并严惩他们。我们一开始也有一些同样的问题,比如“它在我的电脑上起作用”等等,但没过多久,由于殴打和鞭打,这些问题就解决了


在特定点上,开发代码(所有工作代码!!!!)被合并回生产运行并发布给客户。

我们有两个存储库,一个用于代码(经常更改),另一个用于二进制数据(非常大,很少更改)。有时这很痛苦,但在处理代码时,速度越快越好

我们还有一个Ruby脚本,我们称之为“每日更新”,它被检查到我们的存储库中,我们每天清晨通过Windows计划的任务在我们所有的开发PC上启动。它将两个签出更新为最新版本,然后在本地构建所有内容,所以我们可以在早上一到就出发

有一些问题我们还没有解决——例如,当我们的自动化测试运行时,在他们签出代码和签出数据之间存在一个延迟,因此当我们向两个存储库提交更改时,CI服务器有时会收到旧代码和新数据,这会导致测试失败


当我们向数据存储库提交更改时,我们通常只告诉其他人他们需要更新(我们都坐在同一个房间里)。否则,我们通常不会手动更新数据;我们只是让每日更新脚本保持新鲜。

是否可以将项目分解为可以通过某种插件系统连接的较小项目?

首先,在客户端和服务器上升级到SVN 1.6。注释中提到了大文件(r36389)的加速

其次,如果您必须在工作副本中包含整个项目,那么这可能不太适合您,但请使用。我们这样做是为了我们的大型回购,客户做的第一件事是只签出顶级目录,然后要获得更多数据,使用回购浏览器转到所需目录并在其上“更新到此版本”。它在乌龟身上的效果非常好。 1.6还具有“减少深度”选项,可以删除不再需要处理的目录

如果这不适合您,您仍然可以对部分工作副本进行更新。你拥有的文件越多,更新速度就越慢(在Windows上,NTFS似乎对用于更新的锁定策略特别差。他建议在1.7版本中进行修复-TBA,但你可以使用他的“快速修复”来重建当前代码)

另一种选择是更改文件系统,如果可以重新格式化,可以尝试,但我相信您会对此保持谨慎

最后一个选项-关闭.svn firectories和服务器上存储库的病毒扫描程序。如果服务器上运行Apache,请确保在短时间内保持alives打开(以防止发生重新身份验证)。同时关闭工作副本目录和卷影副本的索引。(最后一个没有多大帮助,但您可能会看到比我做的更好的改进,关闭服务器上的AV使我的SVN响应提高了10倍)。

我将简要介绍:

  • 升级至最新版本(1.6.x)。1.5.x还进行了速度优化
  • 确保每个人都在使用同一版本的TortoiseSVN,它是根据服务器的确切版本构建的。我们遇到了很多问题,因为有些人突发奇想进行更新,然后出现了奇怪的问题
  • 外部文件在同一个repo上的服务器、存储库和文件夹之间工作。因此,您可以将二进制文件全部移动到另一个repo/服务器,并仅使用外部文件链接到它们
  • 重新构造文件夹,以便可以进行spa