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

标签 c++ svn version-control migration starteam

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

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

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

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

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

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

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

谢谢!

最佳答案

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

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

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

如果你想恢复一个删除的文件,那么你可以从 svn 仓库的早期版本中恢复文件,然后重新提交(参见 What is the correct way to restore a deleted file from SVN? )。

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

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

关于c++ - 迁移到 SVN,对删除旧文件感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8569004/

相关文章:

c++ - 仅清除部分控制台输出

php - PHP有多成熟 :SVN

svn - 无法在 Linux 上的 Visual Studio Code 中启用 SVN

svn - SVN 中的 'delete' 和 'unversion' 有什么区别?

c++ - 在当前 C++ 草案的 [namespace.def]/2 中,下面突出显示的表达式 `that namespace` 指的是哪个命名空间?

c++ - 如何通过继承将模板参数传递给模板子类?

c++ - 六角射线转换

c# - 分解一个 asp.net web 应用程序

asp.net - 避免重复大型应用程序

visual-studio - 在没有 Visual Studio 的情况下获取 TFS 中的最新源代码