我有一个正在尝试迁移到 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。只需使用 del
、rm
或类似 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/