我有一个包含30k +小文件的回购,我只能通过https://
通过互联网访问服务器。结帐非常非常慢。大约数小时。互联网连接速度约为20Mbs,本地机器为3Ghz多核心。 10k RPM HD。
(遗憾的是,svn://
协议不是一种选择。)
所以我的问题:
可以svn对工作副本进行多线程并行检出吗?
看起来svn checkout按顺序逐个文件传输。每个文件之间有一个微小的延迟,我想这是http请求/回复,可能是我本地文件系统的延迟。 (也许还有一点服务器文件系统延迟?)
由于
答案 0 :(得分:10)
我不知道命令,但您可以编写一个小Python(或您选择的工具)脚本来提供帮助。 “svn list”为您提供每个子目录的名称。然后,您可以在后台检查每个子目录,以便它们并行发生。您可能需要在第2个/第3个/任何级别执行此操作,具体取决于您的目录结构以及所有小文件所在的位置。
我假设你当然没有30K文件在同一目录中。
答案 1 :(得分:4)
您可以使用GNU Parallel进行并行svn签出。 实施例 -
svn ls 'https://foo/bar' | parallel svn export 'https://foo/bar/'{}
这将在'bar'目录下启动并行svn签出。
答案 2 :(得分:0)
虽然我无法想到为什么SVN一次无法检出多个文件,但我不知道任何SVN客户端会这样做。
答案 3 :(得分:0)
可能稀疏检查(较新的SVN版本,> = 1.6左右!)恰好有助于提高性能?
time svn co --depth=empty http://URI
cd svn_repo_root/
time svn up --depth=infinity *
此外,为了在多个小文件的多次查找的情况下解决不良操作系统或SVN服务器/客户端实现性能(由于寻找时间延迟彻底),为服务器和/或客户端提供SSD可能是有用的在小文件的情况下主导文件系统操作 - 寻求SSD的问题要小得多。)
通过编写脚本来解析服务器上的整个存储库树,可能需要在检查之前确保服务器上所有文件的缓存热度。
答案 4 :(得分:-1)
它不会很大程度上取决于服务器的ping时间吗?
如果ping很长,那么您可能无法做任何事情。
处理防火墙的路由器也有可能落后并使用状态数据包检查之类的东西,即查看每个数据包。可以更改路由器以让svn服务器中的东西转义数据包扫描。