关于SVN更新慢的解决方法

阅读更多

原因

SVN cache 监视消耗着时间

把所有状态信息缓存在一个独立进程中 (TSVNCache.exe) 。该进程监视所有驱动器的更改,并在工作副本中的文件被修改时重新获取其状态。该进程以最低优先级运行,所以其他程序不会被它挤兑。这同样意味着状态信息并不是 实时 的,因为它需要几秒钟时间处理图标覆盖的变化。

 

优点 : 图标覆盖递归地显示状态,就是说,如果一个处在工作副本深处的文件被修改了,所有途径的文件夹包括工作副本的根目录都会显示出修改的图标覆盖。也因为该进程可以向 Windows 外壳发送通知,资源管理器左面的树形图通常也会更改。

 

缺点 : 即使你已经不在项目下工作了,该进程仍然持续运行。取决于你工作副本的数量和大小,它将占用 10-50 MB RAM 内存空间。

 

解决方法

方法 1

关闭 SVN cache 监视。即关闭 tsvncache.exe 这个程序对目录的监视。

具体操作步骤如下:

a) 右击任意目录打开右键菜单 , 打开 "tortoisesvn" => "settings" 下的设置窗口

b) 找到 "icon overlays" 的设置项,将 "status cache" 设置成 "none"

方法 2

VN cache 监视设置为 shell default ,添加包含或者排除目录。

具体操作步骤如下:

a) 右击任意目录打开右键菜单 , 打开 "tortoisesvn" => "settings" 下的设置窗口

b) 找到 "exclude path" 的设置项,添加排除的目录或在 "include path" 的设置项添加包含目录

 

设置后将看不到更改显示图标,需要使用以下方法查看差异

 

使用 SVN 的“ check for modifications ”显示差异

具体操作步骤如下:

a) 右击需要比较差异的目录,打开右键菜单,打开 "tortoisesvn" => "check for modifications" ,打开比较差异窗口

注:这样显示文件差异是因为上面关闭监视后,再有修改程序文件,文件夹不再更新修改标识了,无法再通过查看文件平图标来知道是否有文件修改。

 

SVN  ICON OVERLAYS 设置页面详解

 

此页面允许你选择 TSVN 为哪些条目显示图标覆盖。选择网络磁盘可能会非常慢,所以默认情况下不为定位于网络共享中的工作副本显示图标覆盖。你甚至可以取消所有的图标覆盖,但那样做还剩下什么好玩儿的呢?

 关于SVN更新慢的解决方法_第1张图片

USB 闪存看上去是个特殊情况,因为驱动类型是设备自主标识的。于是有些显示为固定驱动器,而有些显示为可移动磁盘。

 

 

 

默认

把所有状态信息缓存在一个独立进程中 (TSVNCache.exe) 。该进程监视所有驱动器的更改,并在工作副本中的文件被修改时重新获取其状态。该进程以最低优先级运行,所以其他程序不会被它挤兑。这同样意味着状态信息并不是 实时 的,因为它需要几秒钟时间处理图标覆盖的变化。

 

优点 : 图标覆盖递归地显示状态,就是说,如果一个处在工作副本深处的文件被修改了,所有途径的文件夹包括工作副本的根目录都会显示出修改的图标覆盖。也因为该进程可以向 Windows 外壳发送通知,资源管理器左面的树形图通常也会更改。

 

缺点 : 即使你已经不在项目下工作了,该进程仍然持续运行。取决于你工作副本的数量和大小,它将占用 10-50 MB RAM 内存空间。

 

Windows 外壳

缓存在外壳扩展 dll 中直接完成,但仅仅是为那些当前可见的文件夹。每次你浏览到其他文件夹,状态信息就会被重新获取。

 

优点 : 仅仅需要很少的内存 ( 大约 1 MB) ,并且可以 实时 显示状态。

 

缺点 : 因为仅有一个文件夹被缓存,图标覆盖不会递归地显示状态。在大一些的工作副本下,它在浏览器中显示一个文件夹将比默认缓存模式花费更多时间。而且 mime-type 列将无效。

 

在这种设置下, TSVN 在浏览器里就完全不去获取状态了。因此,版本控制下的文件将不会获得任何图标覆盖。文件夹也仅仅有个“正常”状态的图标覆盖,其他的不会显示,也不会有其他额外的列可用。

 

优点 : 绝对不会占用任何额外的内存,也完全不会减慢浏览器的浏览速度。

 

缺点 : 文件、文件夹的状态信息不会显示在浏览器中。要获知你的工作副本是否被修改了,你需要使用“检查更新”对话框。

 

若你选择了默认选项,将同样决定如下选择 : 在文件夹包含非版本控制的项目时,把文件夹图标覆盖标记为已修改。这个有用的设置可以提醒你已经创建了非版本控制的新文件。

 

排除路径 是被用来告诉 TSVN 不用 在哪些路径下显示图标覆盖和状态列。如果你有些很大的工作副本,而这些工作副本仅仅包含你完全不想改变的库文件,从而你也不需要显示图标覆盖,这时该功能将会很有用。举个例子 :

 

填写 f:/development/SVN/Subversion 仅仅 在这个特殊文件夹上取消图标覆盖。你仍然可以在该路径下的所有文件、文件夹上看到图标覆盖。

 

填写 f:/development/SVN/Subversion* 将在路径以 f:/development/SVN/Subversion 开始的 所有 文件和文件夹上取消图标覆盖。这意味着你在该路径下的任何文件 / 文件夹上都将看不到图标覆盖了。

 

包含路径 也使用同样的语法。除了有些反例 : 即使该路径处在某个取消图标覆盖显示的特定驱动类型下,或是处在上面的排除路径之下,也依然会显示图标覆盖。

 

TSVNCache.exe 同样使用这些路径来限制它的扫描。如果你想让它仅仅在某些特定文件夹里监视,就取消所有的驱动器类型,并仅仅包含你允许被扫描的文件夹。

你可能感兴趣的:(关于SVN更新慢的解决方法)