TortoiseSVN Logo

常见问题解答

目录

安装和升级

广告

图标叠加

一般问题

我该如何...

错误消息


安装和升级

升级 TortoiseSVN 时,是否必须先卸载现有版本?

不需要。您可以直接将新版本安装在旧版本之上。安装程序会自动卸载旧版本。但您必须在安装程序完成后重启计算机!或者至少需要注销并重新登录。

安装 TortoiseSVN 需要管理员权限吗?

是的,您需要拥有管理员权限才能安装 TortoiseSVN,或者至少有权以管理员权限安装。

但是,安装 TortoiseSVN 后,您可以在没有管理员权限的情况下使用它。

使用 TortoiseSVN 之前是否需要安装 Subversion?

不需要。TortoiseSVN 自带访问仓库所需的一切。只有在您要设置服务器时,才需要 Subversion 软件包。

如何卸载 TortoiseSVN?

只需从 Windows 控制面板中的“添加或删除程序”中卸载即可。这不会影响您的仓库或工作副本。

我的机器上禁用了 MSI 安装。有 .exe 安装程序吗?

exe 安装文件没有用。如果您的机器上确实禁用了 MSI 安装,那么您也没有管理员权限。而您需要这些权限才能安装 TortoiseSVN(外壳扩展需要管理员权限才能安装)。但首先要确保 MSI 安装确实被禁用 - 只有当您的域管理员禁用它时才会发生这种情况。

为什么使用 MSI 而不是 exe 或根本不使用安装程序?

我们使用 MSI 作为安装程序而不是其他程序的原因有很多。

  • 它是开放的。每个人都可以使用 Orca 等 MSI 工具查看我们正在做什么。
  • 如果您愿意,调整现有 MSI 以满足您的特殊需求非常容易。有一些工具可以手动编辑 MSI。您无法对 exe 安装程序执行此操作。
  • 它以 SYSTEM 权限运行,而不仅仅是以管理员身份运行。这很重要,因为 TortoiseSVN 是一个 shell 扩展,它要求我们创建和修改注册表项,而这些注册表项对用户帐户不可访问(这在启用 UAC 的 Vista 上尤其重要)。
  • 通过 GPO,将 MSI 分发到域中的多台计算机/用户非常容易。所有其他安装程序都需要域管理员首先将该安装程序“包装”到 MSI 中才能执行此操作。
  • MSI 是安装 Windows 应用程序的标准和推荐方法。现在,要获得微软的“Vista 认证”徽标,甚至**需要**它。
  • 有一个很棒的开源工具用于创建 MSI 文件:WiX,我们使用它。
  • MSI 负责已安装模块的引用计数,这可以防止所谓的dll hell
  • 需要安装程序,因为我们必须将 TortoiseSVN **注册**到 shell。简单的 exe 无法运行。

安装程序以错误消息中止

安装无法成功的原因有很多

  • “此安装包不受此处理器类型支持。请联系您的产品供应商。” 这意味着您正在尝试在普通的 32 位操作系统上安装 64 位版本的 TortoiseSVN。您需要下载并使用适合您操作系统的正确 MSI 文件。对于普通的 32 位操作系统,请确保 MSI 文件中没有x64
  • “安装程序在 TortoiseSVN 安装之前被中断。您需要重新启动安装程序才能重试” 然后用户 SYSTEM 在安装程序 MSI 所在的文件夹中没有读/执行权限。将 MSI 文件移动到另一个位置或授予用户 SYSTEM 读和执行权限。
  • “无法访问 Windows 安装程序服务” 如果您在安全模式下运行 Windows,或者 Windows 安装程序未正确安装,则可能会发生这种情况。基本上,检查 MSI 所在的文件夹是否未加密或压缩
  • "系统无法打开指定的文件或设备",通常后面会跟着"安装程序在安装此软件包时遇到意外错误。这可能表明此软件包存在问题。错误代码为 2755"。这可能是由于以下原因导致的:
    • 安装程序无法访问 Temp 目录,或者机器的默认 Temp 目录不干净,或者没有足够的可用空间来运行安装程序。
    • 安装程序正在通过映射的网络驱动器在终端服务器上运行。
    • 安装程序无法在 Windows NT 系统环境中创建或写入安装程序目录。
    • 临时文件夹和/或 MSI 文件被加密/压缩。
    要解决此问题,请清除临时文件夹,将安装程序 MSI 文件移动到用户 SYSTEM 具有完全访问权限的本地硬盘驱动器。
  • "此安装包无法由 Windows Installer 服务安装。您必须安装包含较新版本的 Windows Installer 服务的服务包。您至少需要 MSI 安装程序的版本 3

安装后,TortoiseSVN 无法显示,没有上下文菜单可用

如果您使用的是 XP 或 Vista 64 位,请确保您已安装 TortoiseSVN 的 x64 版本。由于这些操作系统版本的资源管理器是 64 位应用程序,因此无法加载 TortoiseSVN 的 32 位版本。

您仍然可以在这些操作系统版本上安装 TortoiseSVN 的 32 位版本:它将显示在这些应用程序的 32 位应用程序文件打开/保存对话框中。

安装后,文件没有 TortoiseSVN 上下文菜单

此问题可能是由注册表中的权限设置引起的。请尝试以下操作:

  1. 使用 regedit 打开注册表编辑器。
  2. 单击 HKEY_CLASSES_ROOT/*/​shellex/ContextMenuH​andlers/TortoiseSVN
  3. 观察显示访问被拒绝的错误消息框。
  4. 右键单击上面提到的键,转到“权限”...
  5. 在权限对话框中,单击“高级”。
  6. 单击“所有者”选项卡,单击您的帐户,然后单击“应用”。
  7. 确认对话框,单击“添加...”
  8. 在文本区域中输入您的帐户名称,然后单击“确定”。
  9. 确认权限对话框。
  10. 单击 HKEY_CLASSES_ROOT/*/​shellex/ContextMenuH​andlers/TortoiseSVN
  11. 检查是否有错误消息框。

如果您没有足够的权限来编辑注册表,您可以通过下载 SysInternals PsTools Suite 并使用以下命令启动 regedit 来解决此问题:

PsExec.exe -i -d -s c:\windows\regedit.exe

图标叠加

升级 TortoiseSVN 后,所有图标叠加都消失了

这是一个已知的问题,在某些升级中会发生,特别是 1.6.8 版本中已报告过。如果发生这种情况,请尝试进行修复安装(当然还要重启)。

如果上述方法无效,请尝试以下其他常见问题解答条目

为什么图标叠加不显示?

  • 您当然在安装后重新启动了您的电脑吗?如果您还没有,请现在这样做。TortoiseSVN 是一个 Windows 资源管理器外壳扩展,它将与资源管理器一起加载。
  • 转到 TSVN 的设置并激活至少固定驱动器的图标叠加。安装程序会自动为当前用户执行此操作(无法为其他用户执行...),但由于您以与安装 TSVN 不同的用户身份使用 TSVN,因此您需要手动设置此项。

图标叠加显示了,但不是全部!

您可能会发现并非所有这些图标都用在您的系统上。这是因为 Windows 允许的叠加数量限制为 15 个。Windows 使用了其中的 4 个,其余 11 个可以被其他应用程序使用。如果您安装了 OneDrive,它将使用另外 5 个插槽。如果您随后安装了另一个云驱动器工具,这些插槽可能会被用完。TortoiseSVN 试图成为一个“好公民(TM)”?并限制其对叠加的使用,以便为其他应用程序提供机会。

  • 正常、已修改和冲突始终加载并可见(如果可能!)。
  • 已删除如果可能则加载,但如果插槽不足则回退到已修改。
  • 只读如果可能则加载,但如果插槽不足则回退到正常。
  • 锁定仅在已加载的叠加少于 13 个时加载。如果插槽不足,它将回退到正常。
  • 已添加仅在已加载的叠加少于 14 个时加载。如果插槽不足,它将回退到已修改。

您可以使用 regedit 查看HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers来检查哪些其他应用程序正在使用叠加。

其他已知使用叠加的应用程序
  • Windows 本身。Vista 和 Win7 比 XP 使用更多。
  • OneDrive
  • GDrive
  • Mega
  • Dropbox
  • 许多其他

如果安装了太多叠加处理程序,并且 TortoiseSVN 没有显示任何叠加,您可以尝试从注册表中删除一些已安装的处理程序。但编辑注册表时要小心!

为什么图标只在本地显示,而不在网络驱动器上显示?

转到设置 -> 外观 -> 图标叠加,并检查您想要查看叠加图标的驱动器类型。请注意,为网络驱动器启用叠加将减慢不仅是 TortoiseSVN,而且整个系统的速度。

为什么 SUBSTed 驱动器上的图标叠加乱了?

如果您的工作副本位于 SUBST 驱动器上,图标可能会混淆。

问题出现是因为缓存试图同时为两个“不同”位置获取状态,但这些位置实际上是相同的,因此同时对同一个工作副本进行了两次状态获取。

有一个简单的方法可以解决这个问题:只需将原始路径从显示覆盖中排除(设置->图标覆盖->排除路径)。

例如,如果您将\\station\folder\wc映射到g:,则将\\station\folder\wc*作为排除模式。

另一种使覆盖起作用的方法是将“状态缓存”设置从“默认”更改为“Shell”。

为什么覆盖显示错误的状态?

有时您会发现覆盖不反映文件和/或文件夹的真实状态。通常,按下F5键就足以使覆盖正确显示(您可能需要等待几秒钟,直到缓存再次获取状态)。

资源管理器左侧的树状视图是另一个故事。它不会更新覆盖,无论您按下F5键多少次。这是资源管理器的问题,超出了TortoiseSVN的范围。

简要说明:树状视图始终显示整个资源管理器树,包括网络驱动器和其他命名空间扩展。由于这些可能非常慢(例如,速度慢的网络驱动器),因此资源管理器树不会一直向覆盖扩展请求更新的覆盖。即使您告诉资源管理器文件夹已更改,并且应该相应地更新覆盖,它也不会这样做。它首先检查自己文件夹是否真的已更改,并且仅在认为文件夹真的已更改时才更新覆盖。

现在,由于文件夹的Subversion状态与文件夹本身无关,因此文件夹本身从未真正更改(仅.svn文件夹中的某些文件,但不是文件夹本身),因此资源管理器不会更新覆盖。

有一些技巧和解决方法可以使资源管理器即使在左侧树状视图上也能刷新覆盖,但这些只是技巧和解决方法,显然并不总是有效。

有一个技巧通常有效,但它很慢,TortoiseSVN无法动态使用该技巧 - 它只会使系统速度变慢。但是,您可以通过在工作副本的根目录上执行“清理”命令来手动触发该技巧。清理命令完成后,您需要等待几秒钟才能让树状视图更新覆盖图标。

为什么覆盖图标有时会变成随机图形?

Windows图标缓存是一个相当有问题的生物。您可以通过以下几种方法解决此问题

  • 安装Microsoft的TweakUI并运行重建图标选项。
  • 或者增加图标缓存大小。转到HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer并添加一个名为Max Cached Icons的新字符串值。默认值为500 - 尝试将其增加到2048。
  • 或者删除Windows目录中的名为ShellIconCache的文件。然后重启。
  • 使用TortoiseSVN 1.3.0及更高版本,您还可以通过从命令行调用TortoiseProc来重建图标缓存,例如TortoiseProc.exe /command:rebuildiconcache

为什么没有“可用更新”或“被其他人锁定”的覆盖?

要显示这样的覆盖层,TortoiseSVN 必须在每次显示覆盖层时联系存储库。这会使资源管理器变得极其缓慢。服务器通常需要几秒钟才能响应,有时甚至需要几分钟 - 您真的希望资源管理器在每次打开版本控制文件夹时都挂起,等待响应吗?

TortoiseSVN 的一项基本设计功能是,除非明确地由某个上下文菜单项请求,否则永远不会联系存储库。即使有这样的限制,保持快速响应仍然是一项艰巨的任务。

如果您想查看哪些用户在工作副本中锁定文件,或者哪些文件需要更新,请使用“检查修改”对话框,然后单击“检查存储库”按钮。

图标叠加

当我右键单击文件时,CPU 使用率为 100%。

每次我右键单击文件时,CPU 都会达到 100%(在显示右键菜单时)。如果我从菜单中选择某项,CPU 会恢复正常。如果我右键单击“空白处”,则 CPU 正常。这是怎么回事?

XP 中存在一个已知错误,会导致在某些配置下访问上下文菜单时 CPU 使用率飙升至 100%。此错误会导致文件复制操作停止、网络连接变慢以及流媒体(例如音频、视频)失真。要解决此错误,您需要通过执行以下步骤禁用 GUI 的过渡效果

  1. 启动控制面板的显示小程序。
  2. 选择“外观”选项卡。
  3. 单击“效果”,然后取消选中“对菜单和工具提示使用以下过渡效果”复选框。
  4. 单击“确定”关闭所有对话框。

另一种通常有效的解决方案是在右键单击以显示上下文菜单之前,左键单击文件或文件夹。

我可以在网络目录上创建本地存储库吗?

您可以使用网络共享上的存储库,但只能作为单个用户使用,就像使用本地硬盘驱动器一样。下一个常见问题解答项目解释了为什么以这种方式共享存储库是一个糟糕的主意(TM)。除非您有非常迫切的理由将存储库保留在网络共享上,否则通常最好避免这样做。

如果您 *真的* 需要访问网络共享上的存储库,您应该执行以下操作之一

  1. 使用以下语法进行驱动器映射
    将 //server/shared 映射到 S
    file:///S:/repos(驱动器字母前有 3 个斜杠)
  2. 使用以下语法直接指定 UNC 路径
    Subversion >= 1.2
    file://server/shared/repos(2 个斜杠)
    Subversion < 1.2(奇怪的语法,我们知道)
    file://///server/shared/repos(5 个斜杠)
    file:///\server/shared/repos(3 个斜杠 + 反斜杠)

但不要说我们没有警告你...

我可以将存储库保留在网络共享上,而不是设置服务器吗?

如果您需要多台计算机访问存储库,理论上您可以创建一个网络共享上的存储库,并使用 file:// 协议访问它。实际上,出于以下四个很好的理由,**不建议**这样做

  1. 您正在授予所有用户直接写入权限,因此他们可能会意外删除或损坏存储库文件系统。
  2. 并非所有网络文件共享协议都支持 Subversion 所需的锁定。有一天你会发现你的存储库被微妙地破坏了。
  3. 您必须以正确的方式设置访问权限。SAMBA 在这方面尤其困难。
  4. 如果一个人安装了更新版本的客户端,该客户端升级了存储库格式,那么其他人将无法访问存储库,直到他们也升级到新版本的客户端。

到目前为止,最好的方法是设置一个真正的服务器进程(例如 Apache 或 svnserve),将存储库存储在服务器可以访问的本地文件系统上,并使存储库服务器通过网络可用。它比你想象的更容易。 Subversion 手册中的第 6 章,服务器配置详细介绍了此过程。

我可以将工作副本存储在网络共享上吗?

这取决于网络共享。但我们真的,真的敦促你**不要**这样做!即使您使用的是 Windows 服务器并使用这些网络共享,fcntl() 文件锁定也不完全可靠。对于基于 Samba 的共享,所有赌注都失效了。这意味着您**将**获得一个损坏的工作副本,然后您将丢失数据!也许不是今天,也许不是明天,但总有一天你会的。

如果您真的必须将工作副本存储在网络共享上,请仔细查看相应的 SQLite 项目的常见问题解答条目

我可以使用不同的 Subversion 客户端与同一个工作副本吗?

是的,您可以随时从一个客户端更改为另一个客户端。客户端只控制您的工作副本以及您的工作副本与存储库之间的交互。不同客户端使用的工作副本中的元数据是相同的。

但是,只有当所有客户端都使用相同版本的 Subversion 库时,您才能使用不同的客户端。TortoiseSVN 使用的 Subversion 库版本在安装程序的文件名中指示,其他客户端也有类似的指示。您必须确保这些版本的前两位数字匹配。例如,所有使用 Subversion 1.6.x 的客户端都可以一起使用(“x”表示此数字与兼容性无关)。

您还需要确保所有客户端都构建在相同的操作系统上。客户端兼容性仅在特定操作系统类型下保证,元数据表示可能会有所不同。您不能在同一个工作副本中使用原生 Windows 客户端和 Cygwin 客户端。如果您通过网络共享工作副本,您不能在同一个工作副本中使用 Linux 和 Windows 客户端。

TortoiseSVN 可以动态转换文本文件中的换行符吗?

查看 Subversion 手册了解svn:eol-style 属性此处。如果您将该属性设置为例如 'native',则该文件在 Linux 上将具有 LF 行结束符,但在 Windows 上将具有 CRLF 行结束符。要了解如何在 TortoiseSVN 中设置这些属性,请阅读我们的文档此处

当冲突出现在目录的属性列表中时,如何找出冲突是什么?

在包含冲突属性的文件夹中,您会找到一个名为dir_conflicts.prej的文件。在文本编辑器中打开该文件,您将看到冲突的属性。选择您要保留的属性,并用该属性覆盖冲突的属性。

我不小心删除了一个文件。如何找回它?

如果您尚未提交更改,则可以在删除文件或目录的父文件夹上执行还原操作。

如果您已经提交了已删除的文件,则可以使用仓库浏览器,切换到文件仍然存在版本的修订版,然后使用上下文菜单中的命令复制到...。将工作副本的路径输入为目标,已删除的文件将从仓库复制到您的工作副本。

您也可以使用此技术恢复已删除的目录。

如果在使用此技巧恢复文件/文件夹后,日志对话框没有显示该文件的历史记录,请不要担心。历史记录仍然存在。如果您在 SVN 中复制文件,您也会复制其历史记录。但是,TSVN 中的 ShowLog 的默认设置是 '停止复制',这意味着当您查看历史记录时,它只回溯到分支点。这样做的原因是,当您查看项目的真实分支时,大多数情况下您只想查看该分支的历史记录。要在 ShowLog 中查看整个历史记录,您需要取消选中 '停止复制' 复选框,然后单击 '获取全部'。

当我右键单击链接时,我得到多个 TortoiseSVN 上下文菜单条目!

这是设计使然。一个条目用于链接本身(.lnk 文件),另一个用于链接指向的目标。这样,链接既可以进行版本控制,又可以像链接一样工作,允许对目标进行操作。实际上,您可以在文件菜单中最多有三个条目(上下文菜单只会显示两个)。

是否可以使用类似于 Visual Source Safe 中的“共享文件”?

是的,但有一些限制。您可以使用“文件外部”从与工作副本相同的存储库的不同部分提取单个文件,但不能从外部存储库提取。您也可以共享文件夹,这些文件夹可以来自任何存储库。请查看外部定义一章,该章节位于Subversion 手册中。

是否可以在没有服务器的情况下使用 TortoiseSVN?

是的,可以。您可以使用 file:// 协议在本地访问您的存储库。但是,我们强烈建议您只在测试时这样做。有关更详细的说明,请参阅此常见问题解答条目

使用 TortoiseProc 时,是否有方法发送用户名和密码?

TortoiseSVN 是一个 GUI 客户端,因此如果需要,它会要求您输入用户名和密码。如果您想在没有用户交互的情况下自动访问您的存储库(即,如果需要,无需输入用户名和密码),请使用命令行客户端。

修订图是如何工作的?

修订图有点特殊,它不像 TortoiseSVN 中的其他功能。它显示了文件或文件夹在历史记录中的图形,其中包含所有文件或文件夹被复制、移动、分支或标记的修订版。

我们经常收到人们询问为什么需要获取存储库根目录的日志,或者为什么需要从 HEAD 修订版获取完整的日志,一直回到第一个修订版。

为了说明清楚:这不是因为我们懒惰的程序员,这是真正必要的。

修订图通过查找所有包含所选项目被复制的修订版来显示所选文件或文件夹的历史记录。并且该图必须使用可用的信息来做到这一点。

如果您查看所选文件或文件夹的日志消息,您可以在日志对话框的下窗格中看到所选修订版的所有受影响路径。这些信息是我们用于修订图的信息。您还会注意到,如果您只显示 /trunk 的日志,您将不会在日志对话框中看到发生在标签或分支中的修订版的任何条目。您甚至不会在该日志中看到您在其中标记或分支 /trunk 本身的条目。--> 这就是为什么我们必须获取存储库根目录的日志:只有存储库根目录的日志才能提供我们所需的所有信息,包括路径何时何地被复制/分支/标记/移动到。

如果我们只获取特定范围的日志而不是所有修订版,我们可能会错过修订版(仍然使用上面的 /trunk 示例)其中 trunk 被分支或标记。即使对这些分支和标签进行了更改,或者它们仍然存在于修订版范围内,该图也无法知道这些分支/标签是从 /trunk 而不是从其他路径创建的。这意味着,该图不仅不完整,而且是错误的。

而且:我们永远不会改变这一点。因为没有什么比一个有时正确的图表更糟糕了 - 你永远不会知道它何时以及是否正确,这意味着它将毫无用处。

当我通过 svn+ssh 提交更改时,为什么日志中没有显示“作者”?

由于 SSH 完全负责身份验证过程,Subversion 甚至不会看到进行提交的作者。因此,要告诉 Subversion 作者,您必须在 URL 本身中指定作者。例如:svn+ssh://[email protected]。您应该在检出工作副本时执行此操作。

为什么 TortoiseSVN 无法识别文件已被修改?

如果您修改了文件,但 TortoiseSVN 无法识别文件已被修改,请首先检查文件是否真的与您工作副本中的文件不同。

如果您确定文件已修改,但它仍然没有在提交对话框中显示为已修改,请确保

  • 文件的“上次修改”日期已更改(某些工具,如十六进制编辑器,喜欢重置该时间)
  • 如果设置了 svn:eol-style 属性,并且更改仅限于换行符,则文件不会显示为已修改,因为对于 Subversion 来说它没有改变

Subversion 使用以下方法确定文件是否已更改

  1. “上次修改”日期和/或文件大小是否已更改?
  2. 如果没有:文件未修改
  3. 如果有:将文件内容与 BASE 文件进行比较
  4. 在第一个不同的字节处停止,将文件标记为已修改
  5. 如果与 BASE 相比没有字节不同,则将文件标记为未修改

当我删除一个文件时,它消失了,如何提交它?

很简单,您提交整个目录!右键单击资源管理器窗口中文件旁边的位置,然后选择提交。提交对话框将显示所有修改以及添加或删除的文件。

在 SAMBA 共享上的工作副本存在权限问题。

升级到 TortoiseSVN 1.5.x 或更高版本后,如果您将工作副本存储在 SAMBA 共享上,则大多数 Subversion 命令都会出现大量“访问被拒绝”错误。

一些用户报告说,在将 SAMBA 升级到最新版本后,问题消失了。如果这没有帮助或您无法升级,请在 SAMBA 配置文件中允许删除只读文件

[global]
delete readonly = yes
对于旧版本,请尝试
[global]
create mask = 0644
force create mode = 0600
security mask = 0555
force security mode = 0600

我们收到的信息表明,主要问题已在 SAMBA 3.2.3 中修复。使用 svn:needs-lock 属性创建只读文件存在一个补充问题。据报道,这个问题已在 SAMBA 3.2.6 或 3.3.0 中修复。

在资源管理器和文件/打开对话框中浏览速度非常慢。

如果您映射了无法解析的网络驱动器,可能是因为驱动器不可访问或您尚未登录,则在 Windows 尝试访问驱动器失败时,文件浏览可能会变得无响应。请取消映射驱动器或确保可以访问它。

从存储库浏览器启动的对话框中,bugtraq: 属性不起作用。

这是设计使然。存储库浏览器不会读取属性,因为如果远程执行此操作,这是一个非常缓慢的操作。只有从本地工作副本读取时,它才足够快。

如果 TortoiseSVN 直接从存储库读取这些属性,则可能需要几秒钟(甚至几分钟!)才能获取它们。

显示日志经常会崩溃。

日志缓存依赖于所有存储库具有不同的 uuid。有关原因和解决方法的详细说明,请参见此处:https://tortoisesvn.subversion.org.cn/logcacheuuids.html

我们知道许多 Subversion 托管公司犯了错误,没有为客户创建新的存储库,而是简单地复制了一个模板存储库。如果您使用的是这样的主机,请告诉 **他们** 修复此问题。

当我更新工作副本时,新文件没有被添加!

在 TortoiseSVN 1.6.0 和 1.6.1 之间,添加的文件夹以“仅此项”的深度添加。这导致了对工作副本该部分的所谓“稀疏检出”。

请更新到最新版本的 TortoiseSVN,以避免将来出现此类问题。

要修复稀疏工作副本,请不要使用“更新”,而是使用 TortoiseSVN 子菜单中的“更新到修订版...”命令(在资源管理器中右键单击),将“更新深度”组合框更改为“完全递归”。

有人告诉我问题/错误 X 在 rXXX 中已修复,但最新版本仍然没有实现/修复?

我们的发布策略是永远不在稳定分支上引入新功能或资源更改。我们在主干上工作,在那里我们修复错误,引入新功能或更改功能的行为。只有重要的错误修复才会合并回稳定分支,并且稳定分支是我们从那里创建发布的地方。

我们有此策略是为了防止将新错误引入稳定分支。毕竟,它被称为 *稳定* 分支。

您请求的功能/报告的错误,即使它在主干上已修复/实现,但由于此策略,它没有合并回稳定分支。这就是为什么您在最新版本中没有看到更改的原因。

如果您感觉冒险,可以使用 nightly build:https://nightlybuilds.tortoisesvn.net/latest/

TortoiseSVN 与 Eclipse 的兼容性不好。

Eclipse 将目录作为其正常操作的一部分进行复制,在 Subversion 工作副本中,它也会复制 .svn 目录。这会导致 TortoiseSVN 认为 bin 目录中存在版本控制文件。

如果您想继续使用 TortoiseSVN 并阻止这种情况发生,则需要将 '**/.svn/' 添加到 Eclipse 的源代码排除列表中。

但 Eclipse 有自己的 Subversion 插件,名为 Subclipse,它使 Eclipse 能够识别 SVN 并从源头解决问题。您可以在 https://github.com/subclipse/subclipse 找到它。安装 Subclipse 后,您需要进行新的检出。它不会修复安装之前进行的检出。

在 Internet Explorer 中上传文件时出现安全警告。

当您在 Internet Explorer 中使用 Web 表单选择要上传的文件时,您可能会收到安全警告,提示程序试图打开 Web 内容,并将 TortoiseSVN 识别为罪魁祸首。

不要惊慌!这是 Internet Explorer 安全模型的一个(错误)功能。由于 TortoiseSVN 是一个 shell 扩展,因此它会在创建文件打开对话框时自动加载,以便提供图标叠加和上下文菜单。
有两种方法可以停止警告

  1. 在 TortoiseSVN 的设置中,转到图标叠加部分,并选中仅在资源管理器中显示叠加和上下文菜单复选框。
  2. 当警告出现时,选中从此应用程序不再显示复选框。

重复插入智能卡的对话框。

如果您使用智能卡软件,您可能会收到一个对话框,要求您每次 TortoiseSVN 尝试连接到存储库时插入智能卡。

不幸的是,一些智能卡供应商认为这不是错误,而是一个功能,即使它除了惹恼用户之外没有任何其他用途。

为了防止 TortoiseSVN 在存储库请求证书时尝试访问 Windows 证书存储,请创建注册表项HKCU\Software\TortoiseSVN\OpenSSLCapi 作为 DWORD,并将它的值设置为0

“与工作副本比较”没有使用配置的 diff 查看器。

当您从日志对话框运行“与工作副本比较”时,即使您已配置使用不同的 diff 查看器工具,也会启动 TortoiseMerge。

这不是错误:此命令不会比较两个文件,即使它看起来像那样。它实际上会创建一个补丁文件,然后启动 TortoiseMerge 来显示将该补丁文件应用于工作副本的效果。由于我们不知道任何其他可以应用补丁文件的 UI 工具,因此启动了 TortoiseMerge。您配置的 diff 查看器无法做到这一点。

调试符号在哪里?

所有调试符号,包括官方版本和夜间构建版本,都托管在 DrDump.com

要访问调试符号,请将您的调试器配置为使用位于https://www.crash-server.com:8080/public/tsvn/71040F62-F78A-4953-B5B3-5C148349FED7/symsrv的符号服务器。

要了解如何使用调试符号服务器,请查看这篇文章

我该如何...

... 向我的文件添加关键字信息,例如作者、修订版本、日期和提交时间?

在 Subversion 手册中阅读关于 Subversion 属性svn:keywords的信息。

使用 TortoiseSVN,按照这里的说明设置属性。

... 更改文件名的大小写?

Subversion 被设计为与 Linux 上使用的区分大小写的文件系统一起使用。在 Windows 区分大小写不敏感的文件系统中,事情并不总是按预期运行。一个典型的例子是重命名一个文件,只改变大小写,例如将 Makefile 重命名为 MAKEFILE。在 Subversion 1.7 之前,您无法在工作副本中轻松地做到这一点,因为 Subversion 要求这两个名称同时存在一段时间,而 Windows 不支持这一点。

最简单的方法是直接使用仓库浏览器重命名。

  1. 提交工作副本中的更改。
  2. 使用仓库浏览器直接在仓库中将文件从 UPPERcase 重命名为 upperCASE。
  3. 更新您的工作副本。

从 Subversion 1.7 开始,这不再是一个问题,因为整个工作副本结构都发生了改变,所以文件可以使用正常的 TSVN->重命名命令进行重命名。

... 提交后如何更改日志消息或作者?

调用日志对话框,并对要编辑的修订版进行右键单击。然后从上下文菜单中选择“更改作者”或“更改日志消息”。为了让服务器接受这些更改,必须为仓库安装一个pre-revprop-change钩子,该钩子允许更改作者或消息。默认安装会拒绝更改作者和日志消息。

... 如何清除 TortoiseSVN 中的下拉列表?

您可以从 TortoiseSVN 的设置对话框中清除所有存储的数据。只需点击相应的按钮即可。

可以通过按 Shift-Delete 永久地从下拉列表中删除单个项目。

... 如何从我的电脑中完全删除一个仓库?

嗯哼:选择文件夹并按Delete(键盘上的键可能只标为Del)。

说真的,没有隐藏文件或设置。仓库完全包含在一个文件夹树中。

对于工作副本也是如此。如果您将工作副本发送到回收站,由于大量的小文件,它可能会严重减慢以后的删除速度。您可能希望尽快清空回收站。

... 如何将日志导出到文本文件?

使用日志对话框。选择您想要的所有条目,然后按 Ctrl+C。然后在您喜欢的文本编辑器中使用 Ctrl+V(或粘贴)。

如果您想自动处理日志消息,或者需要以 xml 格式显示日志消息,可以使用命令行客户端。

... 如何将项目版本号添加到我的项目中?

如果您希望在程序版本号中包含修订号,则需要使用其他工具来完成此操作。您可以在我们网站的下载页面或 TortoiseSVN 文件夹下的 bin 中找到工具 SubWCRev.exe

此工具遍历您的整个工作副本以查找最新的修订版。找到该修订版后,它将替换以下字符串的所有出现:

$WCREV$
此字符串将被您的工作副本的修订号替换。
WCMODS?Modified:Not modified$
如果您有本地修改,则问号和冒号之间的字符串将被插入。如果您没有本地修改,则冒号和美元符号之间的字符串将被插入。在上面的示例中,ModifiedNot modified
$WCDATE$
将被您的工作副本中最高修订版的日期替换。

例如,请查看 TortoiseSVN 源代码树 中的 version.in 文件。此文件用于 TortoiseSVN 及其资源文件。SubWCRev.exe 工具从构建脚本中调用,如下所示:SubWCRev.exe path\\to\\working\\copy version.in version.h 这将创建一个新的文件 version.h,其中所有上述字符串都将被工作副本的值替换。然后,version.h 文件将用于项目本身,并包含在资源文件中以获取版本信息。

... 如何阻止 Subversion 自动合并?

有些人不喜欢 Subversion 在更新时自动将来自他人的更改与他们自己的本地工作副本更改合并。以下是如何将这些文件强制进入冲突状态,以便您可以在方便的时候手动合并。

  1. 在 TortoiseSVN->设置->Subversion 配置文件中,单击编辑按钮。
  2. 通过添加以下两行更改 [helpers] 部分
    diff-cmd = "C:\\false.bat"
    diff3-cmd = "C:\\false.bat"
    (注意双反斜杠)
  3. 创建文件 C:\false.bat,其中包含两行
    @type %9
    @exit 1

这实际上会使自动合并每次都失败,迫使文件发生冲突。

奇怪的“type %9”行的原因是,diff3-cmd 将合并后的输出发送到标准输出。Subversion 然后获取此输出并用合并结果覆盖您的本地文件。添加此行可以避免获得空本地文件。

... 如何查看我当前的沙盒/仓库?

右键单击工作副本中的文件夹,从资源管理器上下文菜单中选择“属性”。然后,在属性对话框中,切换到“Subversion”选项卡。在那里,您可以看到有关所选文件夹的所有信息,包括它指向的 URL。

另一种快速查看此信息的方法是从上下文菜单中选择“重新定位”,然后查看第一个 URL。由于您不想重新定位您的 WC,只需取消此对话框。

... 如何静默/自动安装 TortoiseSVN?

只需像这样启动 MSI 安装程序

msiexec /package TortoiseSVN.msi /quiet INSTALLDIR="path/to/install/dir"

错误消息

无法将 'XXX.svn-base' 复制/移动到 'XXX.tmp':系统找不到指定的文件。

此错误消息通常发生在您尝试更新工作副本时。此错误的原因可能是

  • 存储库中实际上存在两个不同的文件,它们的文件名仅在大小写上有所不同。这在 Windows 检出中无法工作,因为 Windows 文件系统不区分大小写。很可能是其中一个文件被错误地添加了,因此您需要找出哪个文件,确保没有对错误的文件进行提交更改,然后将其删除。
  • 存在一个具有非法(在 Windows 上非法)文件名的文件。例如,像“con”、“lpr”、“com”等名称在 Windows 上是非法的,因为它们是设备名称。当然,包含“/\*?:|”和其他一些特殊字符的名称在 Windows(NTFS 和 FAT)上也不允许。

是的,我们知道在这种情况下错误消息并不真正有用。但是错误消息来自 Subversion 库,我们无法自行更改。

有几种方法可以解决问题并防止其再次发生。查看这些说明

无法将 '.svn/tmp/entries' 移动到 '.svn/entries':文件或目录已损坏且无法读取。

此错误消息通常发生在您尝试更新或提交工作副本时,并且似乎在 Windows 7 系统上很常见。这是由于另一个进程持有 Subversion 需要移动或修改的文件的句柄。这可能是病毒扫描程序。配置病毒扫描程序,以便将您的工作副本和存储库排除在扫描范围之外。

注意:Win7 中存在一个 bug,导致此错误消息比必要时出现更多。此 bug 在 Service Pack 1 中已修复。有关详细信息,请参阅 此帖子

无法打开文件 'XXX\nnn-n.txn\changes':进程无法访问该文件,因为它正在被另一个进程使用。

报告此错误的用户通常表示它随机发生,并且经常发生在大型提交过程中的某个阶段。重试提交可能会成功,也可能在不同点失败。

最可能的原因是病毒扫描程序在不应该的时候保持文件句柄打开。尝试禁用扫描程序,或让它忽略您的存储库。

类似的错误可能发生在您的工作副本中。尝试忽略那里的 .svn 文件夹。

无法添加 'XXX':存在相同名称的对象。

此错误消息通常在您尝试更新工作副本时出现。它被抛出是因为 Subversion 从不删除或覆盖现有的本地数据。您收到此错误可能存在三个原因

  1. 您有一个本地未版本化的文件,其名称与最近由其他人添加的文件相同。在这种情况下,解决方案是将您的本地文件移到其他地方(或重命名),然后更新。之后,您可以决定是否需要以某种方式合并这两个文件,或者如果名称的选择纯粹是巧合,您可以为您的文件指定不同的名称。
  2. 存储库中的文件已重命名,但它仅在大小写方面有所不同,例如 Install.txtinstall.txt,并且您有本地更改。当您更新时,您最终会处于 (1) 的情况,其中修改后的本地文件显示为未版本化。将其移到其他地方,更新,然后整理混乱。
  3. 存储库中实际上存在两个不同的文件,它们的文件名仅在大小写上有所不同。这在 Windows 检出中无法工作,因为 Windows 文件系统不区分大小写。很可能是其中一个文件被错误地添加了,因此您需要找出哪个文件,确保没有对错误的文件进行提交更改,然后将其删除。

OPTIONS of '<path>': 401 Authorization Required <url>

升级到 1.4.x 版本后,您突然无法再访问您的存储库。每次尝试都会被拒绝,并显示错误消息:OPTIONS of 'path': 401 Authorization Required 'url'

造成这种情况的原因是在 1.4.x 版本中激活的 SSPI 自动身份验证。这意味着 TortoiseSVN 现在尝试使用登录到 Windows 域控制器的用户的凭据自动进行身份验证。

如果您已将服务器设置为使用 SSPI 对域控制器进行身份验证,并且域控制器未启用用户帐户 GUEST,则您应该没问题。但是,如果用户帐户 GUEST 处于活动状态,则所有身份验证都将使用该用户成功 - 并且您通常不会授予用户 GUEST 访问您的存储库的权限。这就是为什么身份验证成功,但授权失败的原因。

另一个失败的原因是,如果您为存储库访问设置了与用于登录工作站的帐户不同的帐户(尽管在这种情况下,我想知道您为什么要使用 SSPI 身份验证)。

要解决此问题,您可以选择以下选项

  • 禁用域控制器上的 GUEST 帐户
  • 为您的工作站和存储库访问使用相同的帐户
  • 禁用存储库的 SSPI 身份验证
  • 检查用户名的大小写。将访问文件中的用户名更改为小写也可能解决此问题。

此客户端版本过旧,无法与工作副本 'XXX' 一起使用。

完整的错误消息是:此客户端太旧,无法与工作副本“.”一起使用;请获取更新的 Subversion 客户端。

当您使用与更高 Subversion 版本链接的 Subversion 客户端,然后尝试使用与较旧版本链接的 Subversion 客户端执行命令时,您将收到此错误消息,例如,您在工作副本上使用了 1.4.x 客户端,现在您尝试在同一工作副本上使用 svn 1.3.x 客户端。

原因是 Subversion 1.4 及更高版本在每个命令上透明地升级工作副本。但是,一旦工作副本格式升级,旧客户端就无法再访问工作副本,因为它们不认识新格式。

解决此问题的唯一方法是升级您使用的并导致此错误消息的客户端。或者使用旧客户端进行新的检出。

工作副本已过期。

当您尝试提交对工作副本所做的更改时,您将收到此错误消息。通常情况下,这是因为其他人已在存储库中更改了与您相同的文件。

这意味着您需要使用 更新 命令将您的工作副本更新到与存储库相同的级别。

您可能不理解为什么要这样做,尤其是在您知道存储库没有更改的情况下。答案很简单,您的工作副本没有通过提交完全更新。只有更改的文件和文件夹会自动更新。考虑在新建的存储库上的这个例子

Add Folder in revision 1
Add File1 and File2 in revision 2
Modify File1 and commit in revision 3

现在存储库位于修订版 3,但在您的工作副本中,修订版看起来像这样

Folder       : revision 1
Folder/File1 : revision 3
Folder/File2 : revision 2

现在,如果您修改 File2 并尝试提交,它将失败。客户端告诉存储库 File2 位于修订版 2 且具有本地修改,但存储库已位于修订版 3。如果您随后执行更新,File2 也将位于修订版 3(当然,您的本地更改仍然存在)。

如果您尝试创建分支或标签,也会发生同样的情况。答案始终相同:如果您的工作副本已过期,请更新它!

无法写入标准输出。

TortoisePlink 使用标准 plink 代码,但编译为无窗口应用程序,因此没有地方发送错误消息。在 TSVN 设置 -> 网络中,将 SSH 客户端框设置为使用标准 plink,错误消息将在命令框中显示。一旦它正常工作,请使用相同参数使用 TortoisePlink。

"无法写入标准输出"意味着 Plink 想要抛出一个错误,但由于 TortoisePlink 没有提供 DOS-box,所以没有标准输出可以写入错误消息。

因此,设置中存在问题。尝试使用正常的 plink 程序,看看它抛出了什么错误消息,然后修复设置。

如果正常的 plink 只是挂起,那么传递给它的参数错误(设置对话框,网络选项卡)。

另一种可能性是 SSH 守护进程可能无法找到 svnserve 二进制文件。使用目标用户(此处为 myuser)登录服务器,并键入 "which svnserve"。如果你没有看到二进制文件的路径,请将此文件(以及大多数其他 Subversion 二进制文件)对该用户全局访问。

400 错误请求。

REPORT 请求在 '...' 上失败,'...' 的 REPORT:400 错误请求 (http://...)

你位于阻止 DAV 请求的防火墙之后。大多数防火墙都会这样做。要么请管理员更改防火墙,要么使用 **https://** 而不是 **http://** 访问仓库。这样你就可以使用 SSL 加密连接到仓库,防火墙无法干预(如果它们没有完全阻止 SSL 端口)。

此外,一些杀毒软件(例如卡巴斯基)已知会干扰并导致此错误。

403 禁止访问。

PROPFIND 请求失败:403 禁止

这可能是因为你输入了仓库的父路径,而不是实际的仓库路径。尝试将你想要访问的仓库的名称追加到 URL。你还需要在仓库名称之后将 URL 追加一个尾部 '/' 斜杠。

有关实际错误的更多信息,请查看 Apache 错误日志。

405 HTTP 方法不允许。

PROPFIND 请求失败 - 错误 405 HTTP 方法不允许

此消息有不同的形式。你可能会在以下情况下看到此错误:

  • **PROPFIND 请求失败** 你尝试使用旧版本的 TortoiseSVN 浏览仓库的父路径,而不是仓库本身。尝试追加你想要访问的仓库的名称,或将 TortoiseSVN 升级到 1.2.3 或更高版本。
  • **PROPFIND 请求失败** 你忘记在输入的 URL 末尾追加 '/' 斜杠。旧版本的 TSVN 要求在仓库名称之后有一个 '/'。如果你忘记了这一点,TSVN 将从 URL 中删除仓库名称,因此会尝试访问父目录。
  • **PROPFIND 请求失败** 你尝试通过不允许 DAV 请求的代理访问仓库。通常情况下,你可以使用你的 Web 浏览器正常浏览你的仓库,只有当你使用 svn 客户端时才会出现此错误。你必须配置你的代理/防火墙服务器以允许 DAV 请求通过。或者尝试使用 https 而不是 http:大多数代理无法分析加密的网络数据包,因此无法再阻止 DAV 请求。
    另一个导致此错误的可能性是您机器上运行的病毒扫描程序/防火墙。 许多此类程序会过滤掉 DAV 请求,而您甚至不会注意到。 尝试禁用扫描程序/防火墙。
  • 锁定请求失败 您尝试锁定工作副本中不再存在于存储库中的文件。 更新您的工作副本,然后再尝试锁定文件。

有关导致错误的实际原因的更多信息,请查看 Apache 错误日志。

SVN+SSH:连接意外关闭

据报道,以前有效的形式为 svn+ssh://[email protected] 的 svn+ssh 连接在 TortoiseSVN 1.5 中停止工作。 这似乎与 plink 相关,并且如果在 PuTTY 中设置了默认主机名,就会发生这种情况。

如果是这种情况,您可以使用 regedit 或 regedt32 清除 HKEY_CURRENT_USER/Software/SimonTatham/Putty/Sessions/Default%20Settings/HostName 来解决此问题。

另一位用户报告了以下服务器端修复
  • 通过 ssh 登录您的帐户
  • cd ~
  • cp /etc/bashrc .bashrc
  • nano .bashrc
  • 在行 "mesg y" 前面添加一个 #(将其注释掉)
  • Ctrl+X 退出,在提示保存时按 Y