3

一段时间以来,我一直在玩一个受源代码控制的项目。我添加了几个文件,删除了一些其他文件,并将另一个项目中的整个目录复制到了这个项目中。我现在才意识到,其中一些复制的文件夹内部有 .svn 目录,但是,目前,仅查看项目是不可能弄清楚哪些 .svn 目录与当前项目相关,哪些不属于当前项目。

我非常需要承诺,正如预期的那样,svn 让我头疼。起初我遇到了那些烦人的“丢失或未锁定”错误,但经过大量的搞砸后,我想我真的把事情搞砸了。

那么,我应该如何着手提交呢?我应该只清除所有 .svn 文件夹(我不确定哪些对应于当前项目,哪些不对应)还是会删除将每个文件连接到 svn 服务器中旧版本的所有信息?

谢谢

4

3 回答 3

5

我会尝试以下方法:

  1. 备份您的(损坏的)工作副本
  2. 签出一个干净的工作副本,你想提交你的东西
  3. 删除此(干净)工作副本中的所有文件,但保留所有文件夹.svn 文件夹
  4. 删除(损坏的)工作副本中的所有 .svn 文件夹,但保留所有文件和文件夹
  5. 将损坏的工作副本(当您删除 .svn 文件夹时不再是工作副本)复制到干净的工作副本中
  6. 将所有新文件添加到您的工作副本中(检查svn status
  7. 删除您的工作副本报告为丢失的所有文件(我必须手动删除空文件夹,对不起!)
  8. 现在将所有更改提交到您的存储库

这应该在提交之前仔细审查 svn 状态的工作是不可避免的,如果出现问题重新启动备份

于 2012-07-26T20:17:56.620 回答
1

清除所有.svn文件夹可能不是您需要的。在每个.svn文件夹中,都有一个名为entries. 在该文件中,远程 repo 的 URL(自从使用 Git 后,不再记得正确的 SVN 措辞;抱歉)。

假设您的常规 repo 位于http://server1.com/myregularrepo并且您知道所有复制的文件夹(实际上不属于您的 repo)来自http://otherserver.com/otherrepo,那么搜索那些entries包含http://otherserver.com/otherrepo然后删除其父文件夹(即它们的.svn文件夹)的文件就可以了。

如果您将多个外部 repo 目录复制到您的工作副本中,事情会变得有点复杂,但我认为您已经掌握了该怎么做的窍门。

于 2012-07-26T20:14:24.077 回答
0

如果您的代码是您想要的方式,我相信您可以进行 svn 导出(删除所有 .svn 文件夹,然后将其作为补丁导入到您的原始项目中。

于 2012-07-26T20:20:46.377 回答