日志缓存和仓库 UUID
获取慢速或大型仓库的日志可能需要相当长的时间。当然,这需要您连接到仓库。如果您不在线,则无法显示日志消息 - 如果网络中断或者您身处没有网络访问权限的地方,这将非常烦人。
为了至少部分解决这个问题,TortoiseSVN 1.5 可以缓存来自 Subversion 仓库的日志消息。此功能以透明方式实现,这意味着您无需执行任何操作即可使其工作。您可能会注意到的是,一旦您显示了仓库的所有日志消息,下次日志对话框就会快得多。
如果您想测试此功能,您可以显示 TortoiseSVN 仓库 的日志。点击日志对话框中的“显示全部”按钮以获取所有日志消息。您会注意到获取所有消息需要一段时间。如果您然后关闭日志对话框并再次为相同的 URL 启动它,您可以点击“显示全部”按钮,所有消息都将从日志缓存中获取。
如果您无法连接到仓库,日志对话框将显示一个对话框,您可以在其中选择“离线工作”,即它不会再尝试连接到仓库,而只会使用缓存。
然而,有一个问题:日志缓存依赖于您的所有仓库都分配了不同的 UUID。
如果您有仓库的工作副本,则可以在属性对话框(资源管理器上下文菜单“属性”)中查看仓库的 UUID。
日志缓存需要 UUID 来区分不同的仓库,这些仓库当然有不同的日志消息。日志缓存不能仅使用 URL 来区分仓库的原因是 URL 无法提供该信息。
例如,像 https://example.com/svn/trunk
这样的 URL 清楚地表明仓库位于 https://example.com/svn
。因为我们可以假设 'svn' 不是项目名称。
但是像 https://example.com/svn/project/trunk
这样的 URL 可能意味着它指向 'project' 的仓库,但也可能意味着在 'svn' 只有一个仓库,而 'project' 只是该仓库中的一个文件夹。因此,两个 URL https://example.com/svn/project/trunk
和 https://example.com/svn/otherproject/trunk
可能指向同一个仓库,也可能指向两个不同的仓库。
这就是为什么日志缓存必须依赖于每个仓库的仓库 UUID 都是不同的。
现在,有些人犯了一个错误,通过简单地复制默认(空)仓库来创建新仓库。这样做会导致所有仓库都具有相同的 UUID!是的,这是一个很大的错误:它被称为 UUID 是有原因的:“U” 代表 “Unique”(唯一)。这将完全混淆日志缓存,您会经常看到崩溃报告对话框弹出。
要解决此问题,您必须为每个仓库设置唯一的 UUID。从官方 Subversion 包中获取 svnadmin 工具,并在每个仓库上运行 svnadmin setuuid REPOS_PATH
。
如果您没有直接访问仓库的权限,或者由于其他原因无法更改 UUID,则可以在 TortoiseSVN 设置对话框中禁用日志缓存:
在上面的屏幕截图中,您可能会注意到“允许模糊 URL”选项。既然我已经告诉您缓存依赖于 UUID 的不同,为什么它也依赖于 URL 呢?
比较 URL(即,简单的字符串)比向仓库或工作副本询问仓库 UUID 快得多。因此,如果可能,缓存也会使用 URL。例如,如果缓存知道 URL https://example.com/svn/project/trunk
指向特定的仓库,它也知道 URL https://example.com/svn/project/trunk/subfolder
指向完全相同的仓库,因为不可能在仓库内部再有一个仓库。
“允许模糊 URL”选项适用于不同仓库使用相同 URL 的情况 - 当然,这种情况非常罕见。我们遇到的一个问题是 svnbridge。这是一个很好的工具,允许您使用 SVN 客户端访问 Microsoft Team System 仓库。但是该工具的旧版本使所有仓库都可以通过相同的 URL 为 SVN 客户端访问。
一旦我们与 svnbridge 开发人员讨论了这个问题,他们几乎立即准备好了一个版本,该版本为不同的 Team System 仓库提供了不同的 URL。因此,使用最新版本的 svnbridge,您不应该遇到该问题。但是,如果您由于某种原因无法更新您的 svnbridge 版本,则必须激活“允许模糊 URL”选项。