Eclipse向SVN提交程序时出现问题解决方法详解

开发 项目管理
本文向大家介绍一下SVN提交问题,通过一个实例使用Eclipse向SVN提交程序时出现了问题,比较全面的剖析了在SVN提交过程中要注意的问题。

本节向大家讲解一下在使用Eclipse向SVN提交程序时出现了问题该如何解决,在学习SVN过程中,关于SVN提交方面的问题大家可能经常遇到,下面我们就来看一下使用Eclipse向SVN提交程序时出现了问题时的解决方法,希望通过本文的学习你对SVN提交有一定的认识。
在一个工程中增加了很多程序文件,这些文件有个特点:文件名两两相同,但是分列在两个目录中。我使用Mozilla开发平台开发基于XUL的Firefox的扩展(extension),要支持中英双语,所以在目录en-US和zh-CN两个目录下有名字相同的子目录和文件。当提交到SVN时出现错误,发现Eclipse的SVN插件错误的将zh-CN目录下的一个文件当成了en-US目录下的了,结果,出现了混乱,具体原因不详,下面将现象和解决方法记录了下来。
--------------------------------------------------------------------------------
工作环境
我工作在Fedora8下,Eclipse是FedoraEclipse3.3.0,安装Fedora8时自动安装的。SVN客户端插件记不清楚是后来安装的还是原来有的,在工作视图中有个“SVN资源库研究”项目。
--------------------------------------------------------------------------------
现象
SVN提交locale/zh-CN/overlay目录时,错误提示:
条目已存在
svn:“/xxx/locale/zh-CN/overlay”已纳入版本控制
提交locale/en-US/overlay下的文件时,错误提示如下:
文件系统没有条目
svn:提交失败(细节如下):
svn:文件找不到:事务“524-1”,路径“/xxx/locale/en-US/overlay/文件名”
--------------------------------------------------------------------------------
分析
我感觉到版本管理状态信息在两个地方分别存储:SVN系统内部和Eclipse插件,两者很容易造成不一致。我没有找到确凿的证据,但是感觉到是Eclipse插件报告异常而造成的不一致。基于这个分析,我首先使用SVN命令行命令将SVN中的锁进行清理,删除问题目录,并执行数据库恢复操作。然后将原来备份的程序文件一个一个拷到工作目录中,主要不要拷备.svn目录,然后将其作为新文件和子目录重新上载,到这一步SVN数据库状态已经正确恢复了。然后进入Eclipse,刷新工程,发现涉及的文件和目录都用一个粗+号表示,不知道什么原因,但是发现Eclipse认为这些目录是没有提交的。这也是我认为Eclipse还保留了一份状态信息。SVN提交后全部恢复。
--------------------------------------------------------------------------------
操作命令
首先进入本地工作目录,即包含locale子目录的目录。执行下面操作:svndeletelocale,返回信息:
svn:请使用--force选项强制执行
svn:“locale/zh-CN/overlay”尚未纳入版本控制,看来zh-CN/overlay没有在服务器上创建,但是其下的文件却提交到en-US/overlay下了。
我没有敢直接强制删除,先到locale/zh-CN目录中尝试删除overlay,执行下面的操作:svndeleteoverlay,返回信息:
Doverlay/xxx/xxxxx
Doverlay/xxx/xxx
D......
svn:在目录“.”中
svn:在“%$s”中处理命令“%$s”出错
svn:修改“overlay”的入口出错
svn:“overlay”尚未纳入版本控制
可见overlay下有内容已经提交给服务器了,但是overlay本身没有在服务器上建立。
后来我又删除locale/zh-CN下的文件,发现有个文件,暂且称作“文件A”,被锁定了,删除时出现下面的信息:
svn:工作副本“.”已经锁定
svn:运行“svncleanup”删除锁定(输入“svnhelpcleanup”得到用法)
也许就是因为在处理这个文件时出现异常造成锁定没有释放。
执行释放命令,没有产生输出信息,如下:svncleanup
接下来就是强制删除locale下的en-US和zh-CN,使用下面的命令:svn--forcedeletezh-CN和svn--forcedeleteen-US
接下来还在服务器的版本库中执行了恢复命令:svnadminrecover.好像没有发现问题。至此,locale下的子目录都已经删除了。然后,手工创建子目录并将程序文件一个一个拷入。在包含locale子目录的目录下用命令行执行svnaddlocale,提示说locale目录已经加入了版本控制,因为前面我并没有使用svndelete命令删除locale目录,但是我确实使用Eclipse删除了locale目录,而且在“SVN资源库研究”视图下看不到locale目录了,进一步印证SVN和Eclipse分别保留状态信息。于是到locale中执行svnadd*将所有的目录加入,然后再到Eclipse下,发现locale目录下的每个文件和目录都用一个粗+号标记,使用菜单命令,将locale下的目录提交给服务器,提示说locale还没有加入,于是来到上级目录,将locale目录提交给服务器,至此,问题解决。本节有关SVN提交问题讲解完毕。

 【编辑推荐】

  1. 经验总结:SVN提交数据失败问题行解决行之有效的方法
  2. 专家提醒 SVN提交工作时需要注意的事项
  3. ApacheSVN服务器安装指导手册
  4. SVN安装使用手册跟踪介绍
  5. SVN服务器安装指导手册
责任编辑:佚名
相关推荐

2010-05-26 11:08:33

SVN管理

2010-08-03 09:12:52

Flex安全沙箱

2009-02-18 14:28:23

编码乱码JSP

2013-06-14 10:48:53

IIS 7

2009-12-28 10:56:45

WPF Image

2011-03-30 12:55:51

EclipseADTAndroid

2010-07-29 15:28:47

Flex安全沙箱

2010-05-24 18:46:50

SVN图标

2009-07-17 14:33:05

Jython中文问题

2009-02-26 11:13:41

Weblogic中间件JSP

2009-12-22 11:21:43

WCF跨域访问

2009-06-09 15:51:07

Java ee中文问题解决方法

2011-05-18 14:00:30

在线备份

2010-01-13 21:06:37

双绞线

2011-07-27 15:03:54

iPhone 升级 编译

2009-08-14 13:49:58

Rails中文问题

2009-11-17 10:43:59

ubuntu 9.10输入法解决方法

2010-05-11 15:09:51

Unix系统

2009-10-29 10:04:57

VB.NET Read

2011-04-29 11:02:31

激光打印机
点赞
收藏

51CTO技术栈公众号