我以某种方式设法让SVN存储库陷入糟糕的状态.我已经移动了一个目录,现在我无法在新位置提交它.
就svn status
目前而言,目录是未知的(目录的名称是type
).
$ svn status ? type
当我尝试添加目录时,服务器说它已经存在.
$ svn add type svn: warning: 'type' is already under version control
如果我尝试更新目录,它会再次消失.
$ svn update type svn: '.' is not under version control
如果我尝试提交它,服务器会抱怨它的旧父目录不再存在.
$ svn commit type -m "Moving type" svn: Commit failed (details follow): svn: '/prior/trunk/src/nyu/prior/cvc3/theorem_prover/expression' path not found
为了增加神秘感,目录的内容被标记为已修改.
$ svn status type A + type M + type/IntegerType.java M + type/BooleanType.java M + type/Type.java M + type/RationalRangeType.java M + type/RationalType.java M + type/IntegerRangeType.java
如果我尝试从目录中更新,我会得到这个.
$ cd type $ svn update svn: Two top-level reports with no target
从目录中提交会产生与path not found
上面相同的错误.
发生了什么,我该如何解决?
编辑:@Rob Oxspring把我抓了出来:我在Eclipse中过于激进了.
更新:我接受@Rob Oxspring的答案"不要那样做/刚开始"并接受他的建议.如果有人能告诉我,我仍然感兴趣:(a)上述错误信息的确切含义和(b)如何实际解决问题.
它看起来像是type
由一些Subversion感知复制命令创建的,然后使用Subversion-unaware副本移动到当前目录中.根据我的经验,当包重构操作在Eclipse中链接在一起而没有在它们之间进行提交时,通常会发生这种情况.通常,当您复制/移动本地复制/移动的文件或文件夹时,Subversion不能很好地处理它,尽管我认为版本1.5可以更好地处理它.
为了避免将来这种情况,请在这些步骤之间进行.如果您想要隐藏干预提交,那么我建议在分支上执行多步重构,然后将更改合并到您所追求的单个提交中的主线中.
如果它不是太多的工作,那么我建议你回到一个干净的工作副本并重做你的更改,在每一步之后提交.如果您很高兴丢失历史记录,即允许新记录与旧记录IntegerType.java
完全无关IntegerType.java
,那么您可以采用BCS建议的方法:
将更改的文件移动到某个临时位置,剥离任何.svn
目录
将您的工作副本更新为干净的工作状态
将更改复制回您希望的位置
提交生成的工作副本
修复许多SVN错误的简单方法是通过操作系统移动整个目录,更新以获得它的另一个干净副本,然后使用其他工具,WinMerge等合并您更改的任何内容.
在那之后,你可以做任何你想做的事情,但做得正确:).