附录 F. 实现细节

目录

图标重载

这篇附录包括更详细的关于TortoiseSVN特性实现的讨论

图标重载

每个文件和文件夹都有一个 由 Subversion库报告地Subversion状态。在命令符中,这些通过单个字符来显示,但是在TortoiseSVN ,使用图标来进行图像显示。由于图标数量有限,每个图标代表了多种状态中地一种。

冲突图标用来显示冲突状态,当更新或切换导致了本地更改和版本库下载地更改冲突。它同样用来指示遮蔽状态。当一个操作无法完成时,会发生。

当你完成了本地修改,

修改图标显示修改状态,当版本库修改合并到本地修改时显示合并状态。当文件被删除,或者被另一个同名的其他文件替换时,显示替换状态。

当一个项目计划被删除时,显示

删除图标。当项目未显示时,显示丢失状态。已丢失的项目自身不能拥有图标,但是父文件夹在子项目丢失时,可以被标记。

当一个项目被添加到版本控制时,

添加图标会显示,以代表添加状态。

在Subversion图标用来代表一个项目处于普通状态,或者一个状态不明的处于版本控制中的项目。因为TortoiseSVN使用后台缓存流程来收集状态,在更新图标前可能会花上几分钟。

需要锁定覆盖指明文件具有svn:needs-lock属性

已经锁定覆盖用于本地工作副本持有此文件的锁。

忽略覆盖用来指明项目处于忽略状态。这可能来自全局的忽略设定,或者父文件的svn:ignore属性。覆盖是可选的。

未版本控制覆盖用来代表项目处于未版本控制状态。这个项目位于版本控制文件夹中,但是未版本控制。这个覆盖是可选的。

如果一个项目拥有 Subversion状态(项目不在工作副本中),那么就不会显示图标。如果你选择禁用忽视未版本控制图标,那么这些文件也不会显示图标。

每个条目只有一个 Subversion 状态。例如一个文件可以被本地修改,同时被标记为删除。Subversion 返回一个状态 - 即已经删除。这些优先级是 Subversion 自己定义的。

当 TortoiseSVN 递归显示状态时(默认配置),每个目录用重载图标显示自己的状态和所有子孙的状态。为了显示单个概要重载,我们使用上述优先级决定使用哪个重载,冲突重载使用最高优先级。

In fact, you may find that not all of these icons are used on your system. This is because the number of overlays allowed by Windows is limited to 15. Windows uses 4 of those, and the remaining 11 can be used by other applications. If there are not enough overlay slots available, TortoiseSVN tries to be a Good Citizen (TM) and limits its use of overlays to give other apps a chance.

Since there are Tortoise clients available for other version control systems, we've created a shared component which is responsible for showing the overlay icons. The technical details are not important here, all you need to know is that this shared component allows all Tortoise clients to use the same overlays and therefore the limit of 11 available slots isn't used up by installing more than one Tortoise client. Of course there's one small drawback: all Tortoise clients use the same overlay icons, so you can't figure out by the overlay icons what version control system a working copy is using.

  • 正常, 已修改冲突总是被载入,并可见。

  • Deleted is loaded if possible, but falls back to Modified if there are not enough slots.

  • 只读会在可用时载入,但如果没有足够的空位就会回退到普通

  • 只读只要有可能就载入,但如果没有足够的空位就使用正常来代替。

  • 已增加会在可用时载入,但如果没有足够的空位就会回退到已修改