0

我有一个正在尝试迁移到 SVN 的 StarTeam 存储库。不幸的是,回购是巨大的,所以我不能使用任何极化脚本等。我求助于在 StarTeam 中检查每个版本的快照,然后手动将它们添加/提交到 SVN。

但是,我对如何处理旧文件感到困惑。在 StarTeam 中,我们不得不将已删除的文件移动到“过时”文件夹,因为 purge 命令删除了文件的所有副本。我知道我不需要在 SVN 中这样做,但是 SVN 如何处理已删除/丢失的文件?

假设我有以下结构的三个文件:

trunk/
    Src/
        A.cpp
        B.cpp
        C.cpp

如果从一个版本到另一个版本我删除了“C.cpp”,我是否只需要提交所有 src 以使删除反映在 SVN 存储库中?

同样,如果我删除了“C.cpp”但添加了“D.cpp”,我需要在提交之前对所有“src/”调用 add。这会导致检测和删除丢失的文件出现任何问题吗?它们太多了,无法手动完成并单独删除每一个。

作为一个单独的问题,在我可以添加/提交之前,tortoiseSVN 需要将近 3 个小时才能检测到哪些文件已更改,这是有原因的吗?我看到的只是对话框中的“请稍候...”消息,它需要永远。

谢谢!

4

1 回答 1

1

您对 repo 所做的任何更改都需要提交,所以是的,在这样做之后svn delete您需要svn commit. 同样,当您添加文件时,这是需要提交的更改。在这两种情况下,都可以在不提交的情况下撤消添加和删除。

就在一个事务中添加和删除文件而言,再次“正常工作”,您将有效地发出:

svn delete C.cpp
svn add D.cpp
svn commit

如果要恢复已删除的文件,则可以从 svn repo 的早期版本中恢复文件,然后重新提交(另请参阅从 SVN 恢复已删除文件的正确方法是什么?)。

删除文件时您必须记住的主要事项:您必须使用颠覆工具删除它(即从命令行作为svn delete或使用 TortoiseSVN 中的 Delete。只需使用delrm或 Windows 资源管理器之类的文件管理器删除它,SVN 就会看到该文件作为“ missing ”而不是“ deleted ”,repo 的提交不会提交删除;因此下次更新工作副本时,丢失的文件将被恢复。因此您使用 subversion 删除文件以便 subversion 知道您确实希望将其删除。

对于您的最后一个问题 - SVN 的版本和存储库有多大(就文件数而言)。本质上,T-SVN 必须遍历树并根据 repo-version 检查每个文件以查看它是否已更改。从 SVN 1.7 开始,工作副本格式发生了变化,大量元数据保存在数据库中,并且对原始副本存储的改进(即文件从 svn 出来时的样子)意味着它比它更快曾是。如果您不使用 1.7,那么值得一试。此外,如果您有一个大型 repo,但只处理其中的一小部分,那么请考虑使用稀疏签出来减少本地工作副本的大小。请参阅从 Subversion 签出一个文件的答案,以获得简要概述或稀疏签出。

于 2011-12-19T23:53:42.557 回答