2012-01-13 29 views
2

我最近做了一个svn add Foo/它失败了,因为有一个文件(不是目录)呼吁Foo/.svnSVN卡在破碎的状态

没有真正的想法,我也rm Foo/.svn; svn add Foo/

失败的原因是“富已经下版本控制”,虽然示出了svn status

~ Foo 

代替

A Foo 

因为这个,我不能svn commitsvn add --force Foo/没有帮助。

我该如何解决这个问题?

回答

3

如果您确认Foo的.svn的内容,您可以在条目中看到它。这意味着它已经被保存在Svn本地数据库中,即使它没有把它的.svn数据库放到Foo中。

svn revert Foo迫使Svn将其从条目中删除。

如果你现在问的状态,你的目录是

?  Foo 

然后,您可以重试svn add它,它会工作。

0

尝试在该目录上执行更新以将工作副本恢复到执行rm之前的状态。

+0

这将需要一轮麻烦的备份,因为其他目录中还有其他更改。我正在寻找一种解决方案,只触及'Foo /' – spraff 2012-01-13 16:35:58

+0

我不直接使用svn,而是使用乌龟。有了这个,你可以更新一个目录。因为它在下面使用svn,我认为它可以直接通过命令行。 – 2012-01-13 16:48:20

+0

如果您需要更新“Foo /”而不更新其子级,请使用:--depth空或--depth文件 - 但是,无论如何,我建议您执行烦人的备份操作,以防万一 – 2012-01-13 17:08:12

0

您可以重命名Foo/所在的目录。然后执行svn up并手动合并您的更改。然后你可以添加Foo/目录。

0

既然你刚删除Foo/.svn其中只包含元数据,本地文件的更改在Foo/仍然存在,你可以按照以下步骤来保存所有更改,修复损坏的工作副本:

  1. svn info获得工作拷贝的版本号,你会看到类似 Revision: 94168
  2. mv Foo Foo.bak来备份broken美孚目录
  3. svn up -r 94168 Foo重新从远程存储库中检出Foo,请将94168替换为您的实际修订版本号
  4. rsync -av --exclude='.svn' Foo.bak/ Foo/覆盖最新检出的Foo /以前备份的Foo.bak中的文件,但保留正确的.svn元数据。
  5. svn status Foo,那么你应该看到所有的本地修改(如果你确实进行了更改)为foo

没有内部文件合并应采取。