我们在使用TortoiseSVN这款开源客户端的时候,有时候会遇到一些错误信息的提示,比如说,大家都非常熟悉的400 服务器未能理解请求、403 对被请求页面的访问被禁止等。那么,TortoiseSVN出现错误信息该怎么办呢?下面,就一起来看看小编给大家整理的TortoiseSVN常见的错误信息与解决方法!
TortoiseSVN
TortoiseSVN 1.9.2.26806 64位英文安装版(点击进入)
TortoiseSVN 1.9.2.26806 32位英文安装版(点击进入)
1、无法复制/移动‘XXX.svn-base‘到’XXX.tmp‘:系统找不到指定文件。
这个错误信息通常在你更新工作拷贝时出现,可能的原因有两个:
版本库中有两个文件的名字只是大小写不同,这在Windows下是不允许签出的,因为Windows的文件系统是大小写不敏感的。很可能其中一个文件是误添加的,所以你要找出是哪一个,然后删除它,以确保不会把更改提交到错误的文件。
某个文件的文件名是非法的(对Windows来说非法),比如,“con”, “lpr”, “com”都是非法的,因为这些都是设备名。当然,含有“/\*?:|”和其它特殊字符在Windows(NTFS 和 FAT)也是不允许的。
是,我们知道这个错误信息对解决问题没什么实质性的帮助,但这个错误信息是来自Subversion库的,我们改不了。
有几个办法可以避免这个问题,请看 这里。
2、无法打开文件’XXX\nnn-n.txn\changes‘:无法访问,文件正被其它程序使用。
通常报告这个错误的人都说这个问题是随机发生的,并且通常会在一次大的提交中发生。重新提交可能成功,也可能在别的地方出错。
最有可能的原因是,有一个病毒扫描程序正在非正常地占用这个文件。你可以试着禁用病毒扫描,或者让它忽略你的版本库文件。
类似的错误也可能发生在你的工作拷贝,试试让它忽略 .svn 文件夹。
3、添加‘XXX’失败:同名对象已存在。
这个错误通常是在你更新工作拷贝时发生。之所以抛出这个错误是因为Subversion绝对不会擅自删除或者覆盖你已有的本地文件。有三个可能原因会导致这个错误:
你有一个未纳入版本控制的本地文件,名字跟其他人已添加的文件一样。这种情况下你可以先移走或者重命名你的本地文件再更新。之后你可以决定是需要合并还是把你的文件改个名字。
版本库中的一个文件被重命名了,但只是大小写不一样,如 Install.txt 改为 install.txt,而你在本地作了修改。当你更新时就会遇到第一种情况,你修改过的本地文件被视为未纳入版本控制。将它移到其它地方,再更新,问题解决。
版本库中有两个文件的名字只是大小写不同,这在 Windows 下是 不 允许签出的,因为 Windows 的文件系统是大小写不敏感的。很可能其中一个文件是误添加的,所以你要找出是哪一个,然后删除它,以确保不 会把更改提交到错误的文件。
4、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 用户进行的验证都会通过——但是一般来说你是不会授权 GUEST 访问你的版本库的。这就造成了 验证 通过了,但授权 不成功。
另一个失败的原因是,你设置用来访问版本库的用户跟你用来登录工作站的用户不一致(那我就奇怪了,如果是这样你根本就不应该以 SSPI 方式来验证呀)。
有几个方法可以解决此问题:
在域控制器中禁用 GUEST 用户
将登录工作站的用户和访问版本库的用户设为一样
不用 SSPI 来做版本库验证
检查用户名的大小写,将控制文件中的用户名改为小写对解决问题也可能有帮助
5、客户端版本太旧,不能操作工作拷贝‘XXX’
完整的错误信息是:客户端版本太旧,不能操作工作拷贝’。‘;请下载更高版本的Subversion客户端。
当先使用一个比较高版本的Subversion客户端,然后又用比较低版本的客户端来执行命令,就会发生这个错误。比如你先用了 1.4.x 版的客户端操作工作拷贝,然后用 1.3.x 版的操作同一个工作拷贝。
这是因为Subversion1.4 和 1.5 会自动更新工作拷贝的格式,而老版本的客户端不认新的格式。
唯一的解决办法是升级你的客户端,或者用你老版本的客户端重新签出。
6、工作拷贝已过期
这个错误是在提交修改的时候出现的,通常是因为在版本库里,你想要提交的文件已经被其他人修改了。
这时你要先用 更新 命令更新的的工作拷贝到版本库当前的版本。
你可能会不明白为什么要这么做,尤其是在你 确知 版本库并没有被修改过的情况下。答案很简单,因为提交的时候,并不会彻底更新你的工作拷贝,而只是那些修改的文件会被自动更新。举个例子,有个新建的版本库:
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 (当然,你的本地修改还会在的)。
这个错误还可能在你试图创建分支或标记时出现。答案永远都是:如果工作拷贝已经过期,那就更新呗!
7、无法写到标准输出
TortoisePlink 使用的是标准的 plink 代码,但不是针对 Windows 编译的,因而无法正常发送错误信息。在 TSVN 的设置 -》 网络里,将 SSH 客户端指向标准 plink,错误信息就会输出到一个命令行窗口中。设置好之后再像之前一样运行 TortoisePlink。
“无法写到标准输出” 表示 Plink 想要抛出一个错误,但是因为 TortoisePlink 并没有提供一个 DOS 窗口,所以就没没有标准输出来接收这个错误信息。
知道是设置有问题后,可以先使用普通的 plink 程序,看到底是什么错误,解决它。
如果普通 plink 挂住了,那就是参数不对(设置 -》 网络)。
另一个可能是 SSH 后台程序找不到 svnserve 可执行文件。以你将要使用的用户(此处为 myuser)登录到服务器,输入 “which svnserve”,如果没有显示指向可执行文件的路径,就把该文件(以及其它 Subversion可执行文件)设为对于该用户可全局访问。
8、400 服务器未能理解请求(400 Bad Request)
REPORT request failed on ’。。。‘ REPORT of ’。。。‘: 400 Bad Request (http://。。。)
你的 DAV 请求被防火墙阻止了,多数防火墙都会这么这么干。你可以让你的管理员更改防火墙的设置,或者以 https 访问,如 https://svn.collab.net/repos/svn/ ,这样你与版本库之间的通信是经过 SSL 加密的,防火墙无法阻止(如果它没有封掉 SSL 端口的话)。
另外,现已确认某些病毒扫描程序(如卡巴斯基)也会导致这个错误。
9、403 对被请求页面的访问被禁止(403 Forbidden)
PROPFIND request failed: 403 Forbidden
这有可能因为你试图访问版本库的父目录(而不是版本库本身)。你可以试着在 URL 尾部指定版本库的名字,还有别忘了名字后面的斜杠 ‘/’。
有关导致此错误的真正原因,请查看 Apache 的错误日志。
10、405 HTTP Method Not Allowed
PROPFIND Request Failed - Error 405 HTTP Method Not Allowed
这个错误有几种形式,可能的原因有以下几个:
PROPFIND Request Failed 你试图使用较低版本的TortoiseSVN浏览版本库的父目录。你可以试着在 URL 尾部指定版本库的名字,或者升级TortoiseSVN到 1.2.3 版或更高。
PROPFIND Request Failed 你漏了 URL 末尾的斜杠 ‘/’,较旧版本的 TSVN 要求在版本库名字后必须有斜杠,否则它会砍掉版本库名字,等于试图去访问它的父目录。
PROPFIND Request Failed 你可能正尝试通过一个不允许 DAV 请求的代理访问版本库。通常你用网页浏览器浏览版本库是没问题的,只在使用 svn 客户端时才出错。你必须配置你的代理服务器或防火墙,以让 DAV 请求通过,或者使用 https 来访问,多数代理服务器无法分析加密过的信息包,因而也就无法阻止 DAV 请求了。
另一个可能是你正在运行病毒扫描程序或防火墙,很多此类软件会在你根本不知道的情况下就阻止了 DAV 请求,可以试一下禁用它们。
Lock Request Failed 你尝试在工作拷贝中锁定一个文件,而这个文件在版本库中已经不存在了。你需要先更新工作拷贝。
有关导致此错误的真正原因,请查看 Apache 的错误日志。