迁移到SVN,对删除旧文件感到困惑

时间:2011-12-19 23:34:14

标签: c++ svn version-control migration starteam

我有一个StarTeam repo,我正在尝试迁移到SVN。不幸的是回购是巨大的,所以我不能使用任何极地脚本等。我正在试图查看StarTeam中每个版本的快照,然后手动添加/提交给SVN。

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

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

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

如果从一个版本到另一个版本我删除了“C.cpp”,我是否只需要提交所有src以便将删除内容反映在SVN回购中?

同样,如果我删除了“C.cpp”但添加了“D.cpp”,我需要在提交之前调用所有“src /”上的add。这会导致检测和删除丢失文件的任何问题吗?有太多的东西需要手动完成并逐个删除。

作为一个单独的问题,为什么在我可以添加/提交之前需要花费3个小时才能检测到哪些文件被更改了?我所看到的只是对话框中的“请稍候......”消息,它需要FOREVER。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

如果要恢复已删除的文件,则只需从svn repo的早期版本恢复该文件,然后重新启动(另请参阅What is the correct way to restore a deleted file from SVN?)。

删除文件时必须记住的主要事项是: 必须 使用subversion工具删除它(即从命令行svn delete或使用Delete删除它在TortoiseSVN中。只需使用delrm或Windows资源管理器等文件管理器删除它,SVN就会将文件视为“缺少”,而不是“已删除“,并且repo的提交不会提交删除;因此,下次更新工作副本时,将丢失丢失的文件。因此,您使用subversion删除文件,因此subversion知道您实际上是希望它被删除。

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