原文:http://developer.51cto.com/art/201006/203185.htm
本节向大家简单描述一下SVN错误,在学习SVN的过程中如何避免SVN错误,SVN错误如何解决(locked conflict 文件不存在)这是大家最关心的问题,本节就和大家一起来学习一下,希望通过本节的介绍大家对SVN错误有深刻的理解。
SVN错误记录
1.强制输入提交日志的钩子(hooks)程序(pre-commit)无法运行,提交的时候报错:
Error: Commit failed (details follow): Error: MERGE request failed on ‘/svn/ttt/trunk/engineering/doc/%E5%89%8D%E7%BD%AE%E6%9C%BA’ Error: Failed to start ‘/home/jira/repo/ttt/hooks/pre-commit’ hook
可能的原因:
(1).pre-commit的权限设置问题,确保具有运行权限,chmod a+x pre-commit;有些系统要求所有者为www-data:www-data,这点根据安装的svn而定
(2).系统的资源不足(主要是内存),重启apache服务,如果问题解决,一般是此原因。
2. Relocate can only change the repository part of an URL
如果服务器上的某个文件的位置有改动,如果我们想使用relocate将工作拷贝中的此目录的路径重定位的话,肯定会遇到这个错误的。但是如果使用 switch来改变路径,则不会遇见此错误。
原因(Switch & Relocate的区别)
Switch —–在版本库内改变与当前工作拷贝关联的服务器路径URL(只限于同一个Repository内),应用情景:有时,服务器的目录会有所变化,和你当前工作拷贝关联的服务器URL改变了,这种改变的直接结果是,你在工作拷贝中所做的修改不能提交到服务器,这时就需要Switch到正确的URL再提交。
Relocate—-功能和Switch雷同,差别在于,Relocate实现的是Repository和Repository之间的切换。当服务器地址或Repository名称发生变化时,可以用它来更新你的工作拷贝。
另外:relocate的功能与“svn switch –relocate 旧地址 新地址”相同。
3、最开始出现的SVN错误是locked,严格说,locked不是错误。解决比较简单:右击文件夹—>tortoiseàcleanup,一般情况下不会出错,如果遇到无法cleanup,那就是其他的错误或者冲突了。
4、再就是冲突,conflict。由于两个(或多个)人同时更改了一个文件。理论上专业一点的说法是:采用锁定-修改-解锁方案来进行版本控制。举个例子来讲Sally下载了版本A,此时,版本A此时就进行了锁定,然后Sally对A进行改动,成了A’,未提交;此时Herry再从服务器上下载的时候还是A。Herry也对A进行了改动,成了A’’。那么,Sally提交,版本A升到A’,Herry再提交的时候就会先提示文件过时,请先update。当update的时候提示冲突。
解决的方法也很简单:
在文件夹上右击—>tortoiseàresolveà在弹出的对话框中右击冲突的文件à选择resolve use theirs 或者选择 resolve use mine。此时,Sally和Herry的版本只能提交一份。也就是说只能使用版本A’和A’’ 其中之一。当然这实际上是人工解决的。SVN防止了无知覆盖错误的产生。
产生冲突并不是我们想要的,对于项目的开发也是不好的。所以要尽量避免SVN错误:
一、良好的工作分配是首要的。个人管个人的文件,不更改其他人的文件。
二、工作组安排好提交。
三、个人想要修改文件之前先update,然后再修改;修改完成后及时提交(commit)。
5、还会遇到***文件夹不存在的情况,有时候是组内成员将文件夹删除,这种问题一般不会在正规的开发中遇到。解决的办法就是先备份,然后重新checkout。本节关于SVN错误产生及解决介绍完毕。