当前位置:  开发笔记 > 运维 > 正文

SVN存储库中的"Phantom"目录

如何解决《SVN存储库中的"Phantom"目录》经验,为你挑选了2个好方法。

我以某种方式设法让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)如何实际解决问题.



1> Rob Oxspring..:

它看起来像是type由一些Subversion感知复制命令创建的,然后使用Subversion-unaware副本移动到当前目录中.根据我的经验,当包重构操作在Eclipse中链接在一起而没有在它们之间进行提交时,通常会发生这种情况.通常,当您复制/移动本地复制/移动的文件或文件夹时,Subversion不能很好地处理它,尽管我认为版本1.5可以更好地处理它.

为了避免将来这种情况,请在这些步骤之间进行.如果您想要隐藏干预提交,那么我建议在分支上执行多步重构,然后将更改合并到您所追求的单个提交中的主线中.

如果它不是太多的工作,那么我建议你回到一个干净的工作副本并重做你的更改,在每一步之后提交.如果您很高兴丢失历史记录,即允许新记录与旧记录IntegerType.java完全无关IntegerType.java,那么您可以采用BCS建议的方法:

将更改的文件移动到某个临时位置,剥离任何.svn目录

将您的工作副本更新为干净的工作状态

将更改复制回您希望的位置

提交生成的工作副本



2> BCS..:

修复许多SVN错误的简单方法是通过操作系统移动整个目录,更新以获得它的另一个干净副本,然后使用其他工具,WinMerge等合并您更改的任何内容.

在那之后,你可以做任何你想做的事情,但做得正确:).

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有