【问题标题】:Migration to SVN, confused about deleting old files迁移到 SVN,对删除旧文件感到困惑
【发布时间】:2011-12-19 23:34:13
【问题描述】:

我有一个正在尝试迁移到 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 个小时才能检测到哪些文件已更改,然后我才能添加/提交?我看到的只是对话框中的“请稍候...”消息,它需要 FOREVER。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您对 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 会将文件视为“missing”而不是“deleted”,并且 repo 的提交不会提交删除;因此下次您更新工作副本时,丢失的文件将被恢复。因此您使用 subversion 删除文件,以便 subversion 知道您确实希望将其删除。

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

    【讨论】:

    • 是的,但是如果我有一堆文件在以后的快照中被删除,我如何让它们从存储库中删除而不必手动删除每个文件?
    • 您需要考虑编写脚本。要考虑的关键命令是svn status。我正在考虑如何在没有 Cygwin 的情况下将其转换为 Windows,但在 UNIX 机器上,您可以使用svn status 如下从存储库中删除丢失的文件:svn delete `svn status | awk '/^!/ { print $2 }'` 。同样对于svn add,在svn status 的输出中搜索? 而不是!
    • 在戳...之后您可能可以分两部分进行操作:svn status | findstr /R "^!" > c:\temp\missing_files.txt 然后for /f "tokens=2" %i in (c:\temp\missing_files.txt) do svn delete %i ...同样适用于svn add
    • 我不能完全删除工作副本中的文件夹(本地),“svn add”,然后“svn commit”吗?
    • 也许我应该提到我正在使用 TortioseSVN。在我对文件夹进行添加然后尝试提交文件被删除后似乎意识到,但它给了我一个错误,即目录已过时,我应该先更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2021-10-24
    相关资源
    最近更新 更多