常见问题
目录
安装与升级
- 升级 TortoiseSVN 后,我的所有图标覆盖都消失了
- 升级 TortoiseSVN 时,我是否必须先卸载现有版本?
- 我需要管理员权限才能安装 TortoiseSVN 吗?
- 在使用 TortoiseSVN 之前,我是否需要安装 Subversion?
- 如何卸载 TortoiseSVN?
- 我的机器上禁用了 MSI 安装。有 .exe 安装程序吗?
- 为什么您使用 MSI 而不是 exe 或根本不使用安装程序?
- 安装程序中止并显示错误消息
- 安装后,TortoiseSVN 没有显示,没有可用的上下文菜单
- 安装后,文件没有 TortoiseSVN 上下文菜单
覆盖图标
- 为什么图标覆盖不出现?
- 图标覆盖出现了,但不是全部!
- 为什么图标仅在本地驱动器上可见,而在网络驱动器上不可见?
- 为什么 SUBST 驱动器上的覆盖图标搞砸了?
- 为什么覆盖显示错误的状态?
- 为什么覆盖图标有时会变成随机图形?
- 为什么没有“更新可用”或“被他人锁定”的覆盖?
常规问题
- 当我右键单击文件时,CPU 占用率达到 100%。
- 我可以在网络目录上创建本地仓库吗?
- 我可以将我的仓库保存在网络共享上,而不是设置服务器吗?
- 我可以将工作副本存储在网络共享上吗?
- 我可以将不同的 Subversion 客户端与同一个工作副本一起使用吗?
- TortoiseSVN 可以在文本文件中即时转换换行符吗?
- 当目录的属性列表中存在冲突时,我如何找出冲突是什么?
- 我不小心删除了一个文件。如何恢复它?
- 当我右键单击链接时,我得到多个 TortoiseSVN 上下文菜单项!
- 是否可以像在 Visual Source Safe 中一样使用“共享文件”?
- 是否可以在没有服务器的情况下使用 TortoiseSVN?
- 在使用 TortoiseProc 时,是否可以发送用户名和密码?
- 修订图表如何工作?
- 当我通过 svn+ssh 提交更改时,为什么日志中没有显示“作者”?
- 为什么 TortoiseSVN 无法识别文件已被修改?
- 当我删除文件时,它消失了,我该如何提交它?
- SAMBA 共享上的工作副本的权限问题。
- 在资源管理器和文件/打开对话框中浏览非常慢。
- bugtraq: 属性不适用于从仓库浏览器启动的对话框。
- 显示日志经常崩溃。
- 当我更新工作副本时,不会添加新文件!
- 我被告知问题/错误 X 已在 rXXX 中修复,但最新的版本仍然没有实现/修复?
- TortoiseSVN 与 Eclipse 不能很好地协同工作
- 在 Internet Explorer 中上传文件时的安全警告
- 重复插入智能卡的对话框
- “与工作副本比较”不使用配置的差异查看器
- 调试符号在哪里?
我该如何...
- ... 向我的文件添加关键字信息,如作者、修订号、日期和提交时间?
- ... 更改文件名的大小写?
- ... 在提交后更改日志消息或作者?
- ... 清除 TortoiseSVN 中的下拉列表?
- ... 从我的计算机上完全删除仓库?
- ... 将日志导出到文本文件?
- ... 将项目修订号添加到我的项目中?
- ... 阻止 Subversion 执行自动合并?
- ... 查看我当前的工作区/仓库是什么?
- ... 静默/自动安装 TortoiseSVN?
错误消息
- 无法复制/移动“XXX.svn-base”到“XXX.tmp”:系统找不到指定的文件。
- 无法打开文件“XXX.svn-base”:系统找不到指定的文件。
- 无法移动“.svn/tmp/entries”到“.svn/entries”:文件或目录已损坏且无法读取。
- 无法打开文件“XXX\nnn-n.txn\changes”:该进程无法访问该文件,因为它正被另一个进程使用
- 无法添加“XXX”:同名对象已存在
- “<path>”的 OPTIONS:401 需要授权 <url>
- 此客户端版本过旧,无法与工作副本“XXX”一起使用
- 工作副本已过期
- 无法写入标准输出
- 400 错误请求
- 403 禁止
- 405 HTTP 方法不允许
- SSH 连接意外关闭。
安装与升级
升级 TortoiseSVN 时,我是否必须先卸载现有版本?
否。您只需在新版本上安装旧版本即可。安装程序将自动处理首先卸载旧版本。但是您必须在安装程序完成后重启计算机!或者至少您必须注销并重新登录。
我需要管理员权限才能安装 TortoiseSVN 吗?
是的,您需要具有管理员权限才能安装 TortoiseSVN,或者至少具有使用管理员权限进行安装的权利。
但是在安装 TortoiseSVN 之后,您可以在没有管理员权限的情况下使用它。
在使用 TortoiseSVN 之前,我是否需要安装 Subversion?
否。TortoiseSVN 附带访问仓库所需的一切。只有当您想要设置服务器时,才需要 Subversion 包。
如何卸载 TortoiseSVN?
只需从 Windows 控制面板中的“添加/删除程序”中卸载即可。这完全不会影响您的仓库或工作副本。
我的机器上禁用了 MSI 安装。有 .exe 安装程序吗?
exe 安装文件无济于事。如果 MSI 安装在您的机器上真的被禁用,那么您也没有管理员权限。并且您将需要这些权限来安装 TortoiseSVN(shell 扩展需要管理员权限才能安装)。但首先要确保 MSI 安装是否真的被禁用 - 这只有在您的域管理员禁用了它时才有可能。
为什么您使用 MSI 而不是 exe 或根本不使用安装程序?
我们使用 MSI 作为安装程序而不是其他程序有几个原因
- 它是开放的。每个人都可以通过使用像 Orca 这样的 MSI 工具来了解我们在做什么。
- 如果您愿意,可以很容易地根据您的特殊需要调整现有的 MSI。有一些工具可以手动编辑 MSI。您无法使用 exe 安装程序执行此操作。
- 它以 SYSTEM 权限运行,而不仅仅是以例如管理员身份运行。这很重要,因为 TortoiseSVN 是一个 shell 扩展,它要求我们创建和修改用户帐户无法访问的注册表项(这在启用 UAC 的 Vista 上尤其重要)。
- 通过 GPO 在域中将 MSI 分发到多台计算机/用户很容易。所有其他安装程序都需要域管理员首先将该安装程序“包装”在 MSI 中才能执行此操作。
- MSI 是安装 Windows 应用程序的标准和推荐方式。现在甚至需要获得 Microsoft 的“Certified for Vista”徽标。
- 有一个很棒的开源工具用于创建 MSI 文件:WiX,我们正在使用它。
- MSI 负责已安装模块的引用计数,这可以防止所谓的 dll 地狱。
- 由于我们必须注册 TortoiseSVN 到 shell,因此需要安装程序。一个简单的 exe 文件供您运行是行不通的。
安装程序中止并显示错误消息
安装无法成功的原因有几个
- “此安装包不受此处理器类型支持。请联系您的产品供应商。” 这意味着您正在尝试在普通的 32 位操作系统上安装 64 位版本的 TortoiseSVN。您需要为您的操作系统下载并使用正确的 MSI 文件。对于普通的 32 位操作系统,请确保 MSI 文件中没有 x64。
- “安装程序在 TortoiseSVN 安装完成之前被中断。您需要重新启动安装程序重试”然后用户 SYSTEM 在安装程序 MSI 所在的文件夹中没有读取/执行权限。要么将 MSI 文件移动到另一个位置,要么给用户 SYSTEM 读取和执行权限。
- “无法访问 Windows Installer 服务” 如果您在安全模式下运行 Windows,或者 Windows Installer 未正确安装,则可能会发生这种情况。基本上,检查存储 MSI 的文件夹是否未加密或压缩
- “系统无法打开指定文件的设备”,通常后面跟着 “安装程序在安装此软件包时遇到意外错误。这可能表明此软件包存在问题。错误代码为 2755”。如果发生以下情况,则可能会发生这种情况
- 安装程序无权访问 Temp 目录,或者机器的默认 Temp 目录不干净或没有足够的空间来运行安装程序。
- 安装程序正在通过映射的网络驱动器在终端服务器上运行。
- 安装程序无法在 Windows NT 系统环境中创建或写入 Installer 目录。
- temp 文件夹和/或 MSI 文件已加密/压缩
- “Windows Installer 服务无法安装此安装包。您必须安装包含较新版本的 Windows Installer 服务的 Windows 服务包。 您至少需要 MSI 安装程序版本 3。
覆盖图标
升级 TortoiseSVN 后,我的所有图标覆盖都消失了
这是某些升级的已知问题,特别是已报告了 1.6.8 版本。如果这种情况发生在您身上,请尝试执行修复安装(并重启计算机)。
如果这不起作用,请尝试这些其他 FAQ 条目为什么图标覆盖不出现?
- 当然,您在安装后重启了您的电脑?如果您还没有重启,请立即重启。TortoiseSVN 是 Windows 资源管理器 Shell 扩展,将与资源管理器一起加载。
- 转到 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 的速度,还会减慢整个系统的速度。
为什么 SUBST 驱动器上的覆盖图标搞砸了?
如果您的工作副本位于 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 的过渡效果
- 启动控制面板显示小程序。
- 选择“外观”选项卡。
- 单击“效果”,然后清除“在菜单和工具提示中使用以下过渡效果”复选框。
- 单击“确定”关闭所有对话框。
另一种通常有效的方法是在右键单击以显示上下文菜单之前左键单击文件或文件夹。
我可以将我的仓库保存在网络共享上,而不是设置服务器吗?
如果您需要多台计算机访问仓库,理论上您可以在网络共享上创建一个仓库并使用 file:// 协议访问它。实际上,不建议这样做,原因有四个
- 您正在向所有用户授予直接写入权限,因此他们可能会意外删除或损坏仓库文件系统。
- 并非所有网络文件共享协议都支持 Subversion 所需的锁定。有一天您会发现您的仓库已被巧妙地损坏。
- 您必须以正确的方式设置访问权限。SAMBA 在这方面尤其困难。
- 如果一个人安装了较新版本的客户端,该客户端升级了仓库格式,那么其他所有人将无法访问仓库,直到他们也升级到新的客户端版本。
到目前为止,最好的方法是设置一个真正的服务器进程(例如 Apache 或 svnserve),将仓库存储在服务器可以访问的本地文件系统上,并通过网络使仓库服务器可用。《Subversion Book》中的第 6 章,服务器配置详细介绍了此过程。
我可以将不同的 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
的文件。在文本编辑器中打开该文件,您将看到冲突的属性。选择您要保留的属性并使用该属性覆盖冲突的属性。
我不小心删除了一个文件。如何恢复它?
如果您尚未提交更改,则可以在您删除文件或目录的父文件夹上执行 revert。
如果您已提交删除的文件,则可以使用仓库浏览器,更改为文件仍然存在的修订版本,然后使用上下文菜单中的命令 复制到...。输入您的工作副本的路径作为目标,删除的文件将从仓库复制到您的工作副本。
您也可以使用此技术恢复已删除的目录。
如果在使用此技巧恢复文件/文件夹后,日志对话框未显示该文件的历史记录,请不要担心。历史记录仍然存在。如果您在 SVN 中复制文件,您也会复制其历史记录。但是 TSVN 的 ShowLog 中的默认设置是“在复制时停止”,这意味着当您查看历史记录时,它只会追溯到分支点。原因是当您查看项目的真实分支时,通常您只想查看该分支的历史记录。要查看 ShowLog 中的完整历史记录,您需要取消选中“在复制时停止”复选框,然后单击“获取全部”。
是否可以在没有服务器的情况下使用 TortoiseSVN?
是的,它是。您可以使用 file:// 协议在本地访问您的仓库。但是,我们强烈建议您仅将其用于测试。有关更详细的解释,请参阅 此 FAQ 条目。
在使用 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 使用以下方法确定文件是否已更改
- “上次修改”日期和/或文件大小是否已更改?
- 如果否:文件未修改
- 如果是:将文件内容与 BASE 文件进行比较
- 在第一个不同的字节处停止,将文件标记为已修改
- 如果相对于 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 中修复,但最新版本仍然没有实现/修复?
我们的发布策略是在稳定分支上从不引入新功能或资源更改。我们在主干上工作,我们在那里修复错误、引入新功能或更改功能的行为。只有重要的错误修复才会合并回稳定分支,而稳定分支是我们从中创建发布版本的地方。
我们制定此策略是为了防止将新错误引入稳定分支。毕竟,它被称为稳定分支。
您请求的功能/报告的错误,即使它已在主干上修复/实现,由于此策略也未合并回稳定分支。这就是为什么您在最新版本中看不到更改的原因。
如果您感觉冒险,可以使用每夜构建版本: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 扩展,因此每当创建文件打开对话框时,它都会自动加载,以便提供图标覆盖和上下文菜单。
有两种方法可以停止警告
- 在 TortoiseSVN 的设置中,转到“图标覆盖”部分,并选中仅在资源管理器中显示覆盖和上下文菜单复选框。
- 当警告出现时,选中标记为不再为此应用程序显示的复选框。
重复插入智能卡的对话框
如果您正在使用智能卡软件,则每次 TortoiseSVN 尝试连接到仓库时,您都可能会收到一个对话框,要求您插入智能卡。
不幸的是,一些智能卡供应商认为这不是错误而是功能,即使它除了惹恼用户之外没有任何作用。
为防止 TortoiseSVN 在仓库请求证书的情况下尝试访问 Windows 证书存储,请创建注册表项 HKCU\Software\TortoiseSVN\OpenSSLCapi 作为 DWORD,并将其值设置为 0。
“与工作副本比较”不使用配置的差异查看器
当您从日志对话框运行“与工作副本比较”时,即使您已配置了要使用的其他差异查看器工具,也会启动 TortoiseMerge。
这不是错误:此命令不比较两个文件,即使它看起来像那样。它实际上创建了一个补丁文件,然后启动 TortoiseMerge 以显示将该补丁文件应用于工作副本会是什么样子。并且由于我们不知道任何其他可以应用补丁文件的 UI 工具,因此启动了 TortoiseMerge。您配置的差异查看器无法做到这一点。
调试符号在哪里?
官方版本和每夜构建版本的所有调试符号都托管在 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 不支持这一点。
到目前为止,最简单的方法是直接使用仓库浏览器重命名
- 提交工作副本中的更改。
- 使用仓库浏览器直接在仓库中将文件名从 UPPERcase 重命名为 upperCASE。
- 更新您的工作副本。
从 Subversion 1.7 开始,这不再是一个问题,因为整个工作副本结构都已更改,因此可以使用正常的 TSVN->重命名命令简单地重命名文件。
... 在提交后更改日志消息或作者?
调出日志对话框,并在您要编辑的修订版上右键单击。然后从上下文菜单中选择“更改作者”或“更改日志消息”。为了使服务器接受这些更改,必须为仓库安装一个pre-revprop-change hook,该 hook 允许更改作者或消息。默认安装拒绝更改作者和日志消息。
... 清除 TortoiseSVN 中的下拉列表?
您可以从 TortoiseSVN 的设置对话框中清除所有存储的数据。只需单击相应的按钮即可。
可以通过按 Shift-Delete 永久删除下拉列表中的单个项目。
... 从我的计算机上完全删除仓库?
啊哼:选择文件夹并按 Delete (键盘上的键可能仅标记为 Del)。
说真的,没有隐藏的文件或设置。仓库完全包含在一个文件夹树中。
工作副本也适用。如果您将工作副本发送到回收站,由于大量小文件,它可能会严重减慢将来删除的速度。您可能需要在之后尽快清空回收站。
... 将日志导出到文本文件?
使用日志对话框。选择您想要的所有条目,然后按 Ctrl+C。然后在您喜欢的文本编辑器中使用 Ctrl+V (或粘贴)。
如果您想自动处理日志消息,或者您需要 XML 格式的日志消息,则可以使用命令行客户端来完成。
... 将项目修订号添加到我的项目中?
如果您想要程序版本号中的修订号,则需要一个额外的工具来完成。您可以在我们网站的下载页面或 TortoiseSVN 文件夹下的 bin 中找到工具 SubWCRev.exe。
此工具遍历您的整个工作副本以查找最新的修订版。一旦找到该修订版,它将替换以下字符串的所有出现项
- $WCREV$
- 此字符串将被工作副本的修订号替换。
- WCMODS?Modified:Not modified$
- 如果您有本地修改,则会插入问号和冒号之间的字符串。如果您没有本地修改,则会插入冒号和美元符号之间的字符串。在上面的示例中,是 Modified 或 Not modified。
- $WCDATE$
- 将被工作副本中最高修订版的日期替换。
例如,查看 TortoiseSVN 源代码树中的 version.in 文件。此文件在 TortoiseSVN 及其资源文件中使用。SubWCRev.exe 工具从构建脚本中调用,如下所示: SubWCRev.exe path\\to\\working\\copy version.in version.h
这将创建一个新文件 version.h,其中所有上述字符串都替换为工作副本的值。version.h 文件随后在项目本身中使用,并包含在版本信息的资源文件中。
... 阻止 Subversion 执行自动合并?
有些人不喜欢 Subversion 在更新时自动将来自他人的更改与其自己的本地工作副本更改合并的事实。以下是如何强制这些文件进入冲突状态,以便您可以随时手动合并。
- 在 TortoiseSVN->设置->Subversion 配置文件中,单击编辑按钮。
- 通过添加以下两行来更改 [helpers] 部分
diff-cmd = "C:\\false.bat" diff3-cmd = "C:\\false.bat"
(注意双反斜杠) - 创建文件 C:\false.bat,其中包含两行
@type %9 @exit 1
这有效地使自动合并每次都失败,从而强制文件进入冲突状态。
奇怪的“type %9”行的原因是 diff3-cmd 将合并的输出发送到 stdout。然后 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 中存在一个错误,该错误导致此错误消息出现的次数比必要的次数多得多。该错误已通过 Service Pack 1 修复。有关详细信息,请参阅 此帖子。
无法打开文件“XXX\nnn-n.txn\changes”:该进程无法访问该文件,因为它正被另一个进程使用
报告此错误的人员经常说,它会随机发生,并且通常会在大型提交过程中发生。重试提交可能会成功,也可能会在不同的点失败。
最可能的原因是病毒扫描程序在不应该打开文件句柄时打开了文件句柄。尝试禁用扫描程序,或使其忽略您的仓库。
类似错误可能发生在您的工作副本中。尝试忽略那里的 .svn 文件夹。
无法添加“XXX”:同名对象已存在
当您尝试更新工作副本时,通常会发生此错误消息。抛出此错误是因为 Subversion 永远不会删除或覆盖现有的本地数据。您收到此错误可能有三个原因
- 您有一个本地未版本控制的文件,其名称与其他人最近添加的文件名称相同。在这种情况下,解决方案是将您的本地文件移动到其他位置(或重命名),然后更新。之后,您可以决定是否需要以某种方式组合这两个文件,或者名称的选择是否纯粹是巧合,您可以给您的文件起一个不同的名称。
- 一个文件已在仓库中重命名,但仅大小写不同,例如 Install.txt 到 install.txt,并且您有本地更改。当您更新时,您最终会处于情况 (1),其中修改后的本地文件显示为未版本控制。将其移动到其他位置,更新,然后整理混乱。
- 仓库中实际上有两个不同的文件,它们的名称仅大小写不同。这在 Windows 检出中无法工作,因为 Windows 文件系统不区分大小写。很可能是其中一个文件被错误地添加了,因此您需要找出是哪个文件,确保没有将更改提交到错误的文件,然后删除它。
“<path>”的 OPTIONS:401 需要授权 <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”一起使用
完整的错误消息是:This client is too old to work with working copy '.'; please get a newer Subversion client.
一旦您使用了链接到更高 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。
“could not write to standard output”表示 Plink 想要抛出一个错误,但由于 TortoisePlink 不提供 DOS 框,因此没有标准输出来写入错误消息。
因此设置有问题。尝试使用正常的 plink 程序,看看那里真正抛出了什么错误消息,然后修复设置。
如果正常的 plink 只是挂起,则传递给它的参数不正确(设置对话框,网络选项卡)。
另一种可能性是 SSH 守护程序很可能无法找到 svnserve 二进制文件。以您的目标用户(此处为 myuser)身份登录到服务器,然后键入“which svnserve”。如果您看不到二进制文件的路径,请使此文件(以及很可能其他的 Subversion 二进制文件)对此用户全局可访问。
400 错误请求
REPORT request failed on '...' REPORT of '...': 400 Bad Request (http://...)
您位于阻止 DAV 请求的防火墙后面。大多数防火墙都这样做。要么请您的管理员更改防火墙,要么使用 https:// 而不是 http:// 访问仓库。这样,您可以通过 SSL 加密连接到仓库,防火墙无法干扰(如果它们没有完全阻止 SSL 端口)。
此外,已知某些病毒扫描程序(例如 Kaspersky)会干扰并导致此错误。
403 禁止
PROPFIND request failed: 403 Forbidden
这可能是因为您输入了仓库的父路径,而不是实际的仓库路径。尝试将您希望访问的仓库的名称附加到 URL。您还需要在 URL 的仓库名称后附加一个尾随“/”斜杠。
有关实际错误的更多信息,请查找 Apache 错误日志。
405 HTTP 方法不允许
PROPFIND Request Failed - Error 405 HTTP Method Not Allowed
此消息有不同的变体。您可能会在以下情况下看到此错误
- PROPFIND Request Failed 您尝试使用旧版本的 TortoiseSVN 浏览仓库的父路径,而不是仓库本身。尝试附加您希望访问的仓库的名称,或将 TortoiseSVN 升级到 1.2.3 或更高版本。
- PROPFIND Request Failed 您忘记在您输入的 URL 末尾附加“/”斜杠。旧版本的 TSVN 要求在仓库名称后必须有“/”。如果您忘记了这一点,TSVN 将从 URL 中剥离仓库名称,因此尝试访问父目录。
- PROPFIND Request Failed 您尝试通过不允许 DAV 请求的代理访问仓库。通常,您可以使用 Web 浏览器正常浏览您的仓库,只有在使用 svn 客户端时才会收到此错误。您必须配置您的代理/防火墙服务器以允许 DAV 请求通过。或者尝试使用 https 而不是 http:大多数代理无法分析加密的网络数据包,因此无法再阻止 DAV 请求。
此错误的另一种可能性是您机器上运行的病毒扫描程序/防火墙。许多病毒扫描程序/防火墙会在您甚至没有注意到的情况下过滤掉 DAV 请求。尝试禁用扫描程序/防火墙。 - Lock Request Failed 您尝试锁定工作副本中不再存在于仓库中的文件。在尝试锁定文件之前更新您的工作副本。
有关实际导致错误的更多信息,请查找 Apache 错误日志。
SVN+SSH: Connection closed unexpectedly
据报告,以前可以正常工作的 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。