TortoiseSVN常见的错误信息与解决方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TortoiseSVN常见的错误信息与解决方法相关的知识,希望对你有一定的参考价值。
参考技术A 1、无法复制/移动‘XXX.svn-base‘到’XXX.tmp‘:系统找不到指定文件。这个错误信息通常在你更新工作拷贝时出现,可能的原因有两个:
版本库中有两个文件的名字只是大小写不同,这在Windows下是不允许签出的,因为Windows的文件系统是大小写不敏感的。很可能其中一个文件是误添加的,所以你要找出是哪一个,然后删除它,以确保不会把更改提交到错误的文件。
某个文件的文件名是非法的(对Windows来说非法),比如,“con”,“lpr”,“com”都是非法的,因为这些都是设备名。当然,含有“/*?:|”和其它特殊字符在Windows(NTFS和FAT)也是不允许的。
是,我们知道这个错误信息对解决问题没什么实质性的帮助,但这个错误信息是来自Subversion库的,我们改不了。
有几个办法可以避免这个问题,请看这里。
2、无法打开文件’XXXnnn-n.txnchanges‘:无法访问,文件正被其它程序使用。
通常报告这个错误的人都说这个问题是随机发生的,并且通常会在一次大的提交中发生。重新提交可能成功,也可能在别的地方出错。
最有可能的原因是,有一个病毒扫描程序正在非正常地占用这个文件。你可以试着禁用病毒扫描,或者让它忽略你的版本库文件。
类似的错误也可能发生在你的工作拷贝,试试让它忽略.svn文件夹。
3、添加‘XXX’失败:同名对象已存在。
这个错误通常是在你更新工作拷贝时发生。之所以抛出这个错误是因为Subversion绝对不会擅自删除或者覆盖你已有的本地文件。有三个可能原因会导致这个错误:
你有一个未纳入版本控制的本地文件,名字跟其他人已添加的文件一样。这种情况下你可以先移走或者重命名你的本地文件再更新。之后你可以决定是需要合并还是把你的文件改个名字。
版本库中的一个文件被重命名了,但只是大小写不一样,如Install.txt改为install.txt,而你在本地作了修改。当你更新时就会遇到第一种情况,你修改过的本地文件被视为未纳入版本控制。将它移到其它地方,再更新,问题解决。
版本库中有两个文件的名字只是大小写不同,这在Windows下是不允许签出的,因为Windows的文件系统是大小写不敏感的。很可能其中一个文件是误添加的,所以你要找出是哪一个,然后删除它,以确保不会把更改提交到错误的文件。
4、OPTIONSof’《path》‘:401AuthorizationRequired《url》
升级到1.4.x版之后,你发现无法访问版本库了,每次都出这个错:OPTIONSof’path‘:401AuthorizationRequired’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、工作拷贝已过期
这个错误是在提交修改的时候出现的,通常是因为在版本库里,你想要提交的文件已经被其他人修改了。
这时你要先用更新命令更新的的工作拷贝到版本库当前的版本。
你可能会不明白为什么要这么做,尤其是在你确知版本库并没有被修改过的情况下。答案很简单,因为提交的时候,并不会彻底更新你的工作拷贝,而只是那些修改的文件会被自动更新。举个例子,有个新建的版本库:
AddFolderinrevision1
AddFile1andFile2inrevision2
ModifyFile1andcommitinrevision3
现在版本库处于修订版本3,但你的工作拷贝的版本会是这个样子:
Folder:revision1
Folder/File1:revision3
Folder/File2:revision2
这时如果你修改File2然后提交,就会失败。因为客户端告诉版本库File2是在版本2的基础上作修改的,但是版本库已经处于版本3了。如果此时你执行更新命令,就会将File2也变成版本3(当然,你的本地修改还会在的)。
这个错误还可能在你试图创建分支或标记时出现。答案永远都是:如果工作拷贝已经过期,那就更新呗!
7、无法写到标准输出
TortoisePlink使用的是标准的plink代码,但不是针对Windows编译的,因而无法正常发送错误信息。在TSVN的设置-》网络里,将SSH客户端指向标准plink,错误信息就会输出到一个命令行窗口中。设置好之后再像之前一样运行TortoisePlink。
“无法写到标准输出”表示Plink想要抛出一个错误,但是因为TortoisePlink并没有提供一个DOS窗口,所以就没没有标准输出来接收这个错误信息。
知道是设置有问题后,可以先使用普通的plink程序,看到底是什么错误,解决它。
如果普通plink挂住了,那就是参数不对(设置-》网络)。
另一个可能是SSH后台程序找不到svnserve可执行文件。以你将要使用的用户(此处为myuser)登录到服务器,输入“whichsvnserve”,如果没有显示指向可执行文件的路径,就把该文件(以及其它Subversion可执行文件)设为对于该用户可全局访问。
8、400服务器未能理解请求(400BadRequest)
REPORTrequestfailedon’。。。‘REPORTof’。。。‘:400BadRequest(http://。。。)
你的DAV请求被防火墙阻止了,多数防火墙都会这么这么干。你可以让你的管理员更改防火墙的设置,或者以https访问,如https://svn.collab.net/repos/svn/,这样你与版本库之间的通信是经过SSL加密的,防火墙无法阻止(如果它没有封掉SSL端口的话)。
另外,现已确认某些病毒扫描程序(如卡巴斯基)也会导致这个错误。
9、403对被请求页面的访问被禁止(403Forbidden)
PROPFINDrequestfailed:403Forbidden
这有可能因为你试图访问版本库的父目录(而不是版本库本身)。你可以试着在URL尾部指定版本库的名字,还有别忘了名字后面的斜杠‘/’。
有关导致此错误的真正原因,请查看Apache的错误日志。
10、405HTTPMethodNotAllowed
PROPFINDRequestFailed-Error405HTTPMethodNotAllowed
这个错误有几种形式,可能的原因有以下几个:
PROPFINDRequestFailed你试图使用较低版本的TortoiseSVN浏览版本库的父目录。你可以试着在URL尾部指定版本库的名字,或者升级TortoiseSVN到1.2.3版或更高。
PROPFINDRequestFailed你漏了URL末尾的斜杠‘/’,较旧版本的TSVN要求在版本库名字后必须有斜杠,否则它会砍掉版本库名字,等于试图去访问它的父目录。
PROPFINDRequestFailed你可能正尝试通过一个不允许DAV请求的代理访问版本库。通常你用网页浏览器浏览版本库是没问题的,只在使用svn客户端时才出错。你必须配置你的代理服务器或防火墙,以让DAV请求通过,或者使用https来访问,多数代理服务器无法分析加密过的信息包,因而也就无法阻止DAV请求了。
另一个可能是你正在运行病毒扫描程序或防火墙,很多此类软件会在你根本不知道的情况下就阻止了DAV请求,可以试一下禁用它们。
LockRequestFailed你尝试在工作拷贝中锁定一个文件,而这个文件在版本库中已经不存在了。你需要先更新工作拷贝。
有关导致此错误的真正原因,请查看Apache的错误日志。
TortoiseSVN常见的16个使用问题与解决方法
参考技术A TortoiseSVN常见的16个使用问题:1、鼠标右键点击 文件 时CPU占用100%
每次右键点击文件,CPU飙升到100%(同时右键菜单被显示。)如果从菜单中选择某项,则CPU又恢复正常;如果在空白处点击右键,CPU将不会有问题,到底是怎么回事?
XP包含了一个已知的bug,当你在特定的配置文件下访问上下文菜单会引起cpu占用上升到100%。这个bug会使文件复制暂停,使网络连接缓慢,流媒体(声音,视频)扭曲。 为了工作在包含这个 bug 的环境下,你需要通过以下操作禁止图形界面的传输效果:
控制面板-》显示
选择外表栏
点击效果,然后清空“为菜单和工具提示使用以下过渡效果”栏
点击确定关闭所有的对话框。
另一种解决方法是在点击右键显示上下文菜单前点击一次左键。
2、是否可以创建一个本地的版本库到网络文件夹?
不能创建 Berkeley DB 版本库到共享的网络 地址 !
BDB 版本库 不能 存在于远程文件系统,比如NFS,AFS,或者Windows SMB。 BDB要求文件系统运行在严格的POSIX语义环境,更重要的是,将文件直接映射到进程 内存 的能力。很多没有网络的文件系统都提供了这个功能。 如果你尝试在网络共享中使用BDB,结局是不可预知的。你可能会立刻看到诡异的错误,或者在几个月以后,你发现版本库隐约被毁坏。
你可以使用 FSFS 格式 的版本库但只有一个用户可以访问本地 硬盘 ,接下来的FAQ项目会讲到为什么共享版本库是一个坏想法。 除非你真的有迫切的原因让你的文件放到网络共享,通常来说,最好的办法就是避免这样做。
如果你真的需要通过网络共享访问FSFS版本库,你应该按照下面的其中一点来做:
用下面的语法规则来映射网络 驱动 器:
将//server/shared映射到S:
file:///S:/repos (盘符前有三个斜杠)
通过下面的格式指定一个UNC直接路径:
Subversion 》= 1.2
file://server/shared/repos (2个斜杠)
Subversion 《 1.2 (奇怪的语法,我们知道)
file://///server/shared/repos (5个斜杠)
file:///server/shared/repos (3个斜杠+反斜杠)
但是不要说我们没有提醒过你……
3、是否可以将版本库保存在网络共享驱动器来代替创建服务器?
如果你需要多个电脑访问版本库,在理论上你可以创建 FSFS 版本库(但不能是 BDB 版本库)在网络共享驱动器上,通过已下格式访问 file:// protocol。事实上这里有三个不推荐的原因:
你将给所有用户直接访问权限,所以他们会有可能偶然的 删除 或者破换版本库文件系统。
并不是所有的网络共享协议都支持Subversion要求的锁定。总有一天你会发现你的版本库被悄悄的破坏。
你不得不设置正确的访问权限,SAMBA 在这一点上特别难以满足。
更好的办法是创建一个真正的服务器进程(像Apache,svnserve),存储版本库到当地的文件系统上,使版本库服务器可以在网络上有效,可以被访问。这也许会比你想的要简单。Subversion书中 第6章 服务器配置 有详细的方法说明。
4、是否可以使用不同的Subversion客户端来操作同一个工作拷贝?
可以,客户端只是用来控制你的工作拷贝,以及工作拷贝与版本库之间的交互。工作拷贝里的元数据对于不同的客户端来说都是一样的。
但是,必须是使用同一版本Subversion库的客户端。TortoiseSVN 所使用的Subversion版本会在安装文件的文件名里标明,其它的客户端也会有类似说明。版本号的头两位数一致的客户端才能通用。例如,所有使用Subversion1.5.x 的客户端都可通用(‘x’表示此位数字不影响兼容性)
你还必须确保这些客户端都是为同一个操作系统编译的。客户端兼容的前提是必须是同一种操作系统,并且元数据的表示方式可能发生变化。你不可以 对同一个工作拷贝同时使用Windows的原生客户端和Cygwin的客户端。如果是通过网络共享的工作拷贝,你不可以 同时使用Windows的客户端和Linux的客户端。
5、TortoiseSVN能实时自动转换文本文件中的换行符吗?
请到查看Subversion书中关于svn:eol-style属性的内容。 比如说,如果你将此属性设置为‘native’,在 Linux 下它就会以LF作为换行符, Windows 下则是 CRLF。想了解如何通过TortoiseSVN设置这些属性,请到 这里 阅读我们的文档。
6、如果冲突是在一个文件夹的属性里,怎样找到它呢?
在属性有冲突的文件夹里,有一个dir_conflicts.prej文件,用文本 编辑器 打开它,你会看到有冲突的属性,用你想保留的属性覆盖有冲突的。
7、我误删了一个文件,怎么找回来?
如果你还没提交,你可以在被删除的文件/文件夹的父文件夹作 还原 操作。
如果你已经提交了删除文件,你可以使用版本库浏览器,回到那文件还存在时的版本,然后在上下文菜单中使用 拷贝到…… 命令,输入你工作拷贝的路径作为目标路径,被删除的文件就会从版本库复制到你的的工作拷贝。
用这个方法也可以恢复被删除的目录。
如果用这个方法恢复文件/目录后,日志对话框无法显示它的修改历史,别担心,历史信息还在的。在 SVN 中复制一个文件时,它的历史信息会同时被复制。但TortoiseSVN的查看日志功能默认是“Stop on copy”,即当你查看的日志是由分支点开始的。之所以这么做是因为当查看一个真正的分支时,你多数只是想知道那个分支的历史信息。如果要看完整的历史信息,你可以不选 ‘Stop on copy’,而把‘Get All’选上。
8、为什么我右击一个链接的时候有几个TortoiseSVN菜单?
这是正常的,其中一个是针对链接本身(.lnk-file 文件),另外一个针对它指向的文件。这样既可以对一个链接文件进行版本控制,又可以对它指向的目标进行控制。事实上在文件菜单里你会有多达三个菜单(上下文菜单只显示二个)。
9、能不能像 Visual Source Safe 一样使用‘共享文件’?
Subversion中不能共享一个文件,但可以共享一个文件夹。请查看 Subversion Book中外部定义一章。
10、没有服务器,可以单独使用 TortoiseSVN 吗?
可以,你可以用file://协议来访问你的本地版本库。
11、使用TortoiseProc时可以发送用户名和 密码 吗?
TortoiseSVN 是一个 图形化客户端,它会在需要的时候提示你输入用户名和密码。如果你想以非交互方式访问版本库,可以使用命令行客户端。
12、版本分支图是怎么一回事?
版本分支图跟TortoiseSVN的其它功能不一样。它可以显示一个文件或文件夹的所有历史修订,包括拷贝、移动、分支和加标记操作。
我们经常会被问到“为什么要把版本库根目录的日志也拿下来”,或者是“为什么会需要取由第一次修订到最新一次修订的全部日志呢”
我得澄清一点:这可不是因为我们太懒,或是笨到不会优化——尽管你们有些人似乎就是这么暗示的。我们这么做其实是有必要的。
版本分支图是通过查找针对某个对象的所有修订,来呈现它的历史的,这需要用到所有的可用信息。
如果查看选定文件/文件夹的日志,在日志对话框的下半部分你可以看到选中的修订影响到的所有路径,这就是在版本分支图用到的信息。如果查看/trunk的日志,你会发现里面没有记录加标记或分支的日志,就算是对/trunk本身加标记、作分支也不会有。 --》 这就是取版本库根目录日志的用意:只有版本库根目录日志才包含这些所需信息,包括一个目录何时曾被复制、分支、打标记或移动到何处。
沿用前面的例子,如果我们不取所有修订的日志,而只取一部分的,那就有可能丢失/trunk作分支、打标记的日志。而且即使那些分支、标记本身做过修改,或者那些日志也在取下的部分里,版本分支图也无法知道那些分支、标记操作是在/trunk还是别的路径发生的。这意味着,版本分支图不单是不完整的,还有可能是错的。
因此我们不会去做所谓的“优化”,如果这个图一时正确一时错误,而且你还无从判断它是否正确、什么时候正确,这比完全没用的东西更糟糕。
13、通过 svn+ssh 提交时,为什么日志里没有‘作者’信息?
以上是关于TortoiseSVN常见的错误信息与解决方法的主要内容,如果未能解决你的问题,请参考以下文章
如何正确使用 KDiff3 与 TortoiseSVN 来解决冲突?