【问题标题】:Losing SVN history on files during refactoring在重构期间丢失文件的 SVN 历史记录
【发布时间】:2011-04-26 08:06:30
【问题描述】:

在一些重构过程中,我正在移动文件。显然 SVN 认为这是删除文件并创建一个新文件,因为 IDE 不会触发 SVN 重命名/移动操作。但是,我认为 SVN 服务器会足够聪明地检测到它,但事实证明并非如此……无论如何,并非总是如此。我正在使用 Tortoise SVN,我正在取消选中“停止复制/重命名”按钮。

这是预期的吗?有办法绕过吗?我应该使用 Tortoise SVN shell 命令移动文件,而不是让 IDE 进行常规文件移动吗?

另外,如果它不知道,是否可以手动强制 SVN 将两个文件链接为同一个实体?就像告诉它“/com/john/test.tct 和 /com/john/test/file.txt 一样”?

【问题讨论】:

    标签: svn tortoisesvn


    【解决方案1】:

    SVN 执行此操作的方法实际上是让 SVN 重命名文件(svn move 或使用 TortoiseSVN 的“重命名”)。但是,如果你绝对必须有一些外部工具来执行重命名操作,你可以使用 TortoiseSVN 来修复移动操作。下面将告诉 SVN 新文件实际上是重命名的旧文件:

    1. 打开“检查修改”窗口。
    2. 同时标记旧文件名(列为缺失)和新文件名(列为未版本)
    3. 右键单击该选项并选择“修复移动”。

    注意:我是凭记忆输入的。它可能并不完全正确。并且可能还有其他方法可以做到这一点(比如在资源管理器中标记文件)。

    如果您已经丢失了一个文件的历史记录,而您非常想念它,您可以恢复旧文件(您可以通过svn copying 将旧版本的版本放到旧位置来执行此操作),将新文件的历史记录合并到其中,然后删除新文件,并将svn move旧文件改成新文件名。

    【讨论】:

    • 谢谢,非常有趣。我认为通过 SVN 客户端完成所有这些操作是不可行的,因为许多重构操作会自动执行此操作,然后您将面临手动更新项目/构建文件,而这实际上只是解决了问题。我当然会试试 Tortoise 的东西……但大概这必须包含标准的 SVN 操作,它们是什么?
    • @John:可能就像包装svn move 一样简单,但我从未尝试过svn move source targetsource 已经重命名为target 时所做的事情,所以可能更多比这复杂。我不知道。
    • 有关如何修复重命名/移动的详细说明,请参见此处:tortoisesvn.net/node/351
    • @Stefan:感谢您提供的链接,并且非常感谢您非常为该项目付出的所有时间!
    • Stefan 的链接坏了,我想这是新的链接:tortoisesvn.net/repairmoves.html
    【解决方案2】:

    您可以安装(免费)visual studio 插件AnkhSVN。这将跟踪您的文件重命名,并且您不会丢失 subversion 中的历史记录。

    文件重命名由 subversion 客户端跟踪。如果您不使用 subversion 客户端重命名文件(使用 windows 资源管理器或 Visual Studio 解决方案资源管理器而不是 TortoiseSVN 或 AnkhSVN),那么 subversion 将无法识别重命名操作(仅删除和添加操作)。

    顺便说一句:使用 AnkhSVN 为您提供了一些其他优势,例如直接在解决方案资源管理器中显示文件的颠覆状态。

    另外还有VisualSVN,可以和AnkhSVN媲美,但是是商业化的。

    【讨论】:

    • 这不是 Visual Studio……它实际上是一个 Flex 项目。那么这是一个普遍的问题吗?我实际上在VS上使用过VisualSVN,它非常好,但我不知道它跟踪移动。
    • @John:糟糕,抱歉。但是,是的,这是一个常见问题(正如我所写的)。您必须使用颠覆客户端(例如 TortoiseSVN 的重命名命令)来进行文件重命名。不知道flex IDE有没有类似的插件。
    【解决方案3】:

    Tortoise 在查看日志时默认为停止复制。

    如果您在日志查看器上取消选中该框,那么您将能够看到文件/目录的整个历史记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-19
      • 2011-05-09
      • 2017-09-15
      • 1970-01-01
      • 2012-08-06
      • 2010-12-03
      • 2011-04-01
      • 1970-01-01
      相关资源
      最近更新 更多