在重构期间丢失文件的SVN历史记录

时间:2010-10-16 14:03:02

标签: svn tortoisesvn

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

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

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

3 个答案:

答案 0 :(得分:25)

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

  1. 打开“检查修改”窗口。
  2. 标记旧文件名(列为缺失)和新文件名(列为未版本)
  3. 右键单击此选项并选择“修复移动”。
  4. 注意:我正在从内存中输入此内容。它可能不完全正确。并且可能还有其他方法可以执行此操作(例如在资源管理器中标记文件)。

    如果你已经丢失了一个错过它的文件的历史记录,你可以复活旧文件(你通过svn copy将旧版本的版本放到旧版本中来执行此操作),合并新文件的历史记录进入它,然后删除新文件,并将旧文件svn move改为新文件的名称。

答案 1 :(得分:2)

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

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

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

另外,还有VisualSVN,与AnkhSVN相当,但是商业化。

答案 2 :(得分:0)

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

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