如何告诉TortoiseSVN重命名的文件被重命名(未删除并重新添加)?

时间:2010-02-03 21:02:36

标签: visual-studio svn tortoisesvn visualsvn

在这里使用VisualSVN和TortoiseSVN。

我已重命名我的文件。我注意到添加和删除对我来说意味着历史记录可能会被删除?

在Subversion中重命名文件而不丢失历史记录的最佳方法是什么?

6 个答案:

答案 0 :(得分:19)

历史记录不会被删除,但您将丢失历史记录,因为它似乎是两个不相关的文件。

来自TortoiseSVN docs

  

如果要对文件或文件夹进行简单的就地重命名,请使用上下文菜单→重命名...输入项目的新名称,您就完成了。

     

修复文件重命名

     

有时你友好的IDE会为你重命名文件,作为重构练习的一部分,当然它不会告诉Subversion。如果您尝试提交更改, Subversion会将旧文件名视为缺失,将新文件名视为未版本控制的文件。您可以检查新文件名以将其添加进去,但随后您将丢失历史记录跟踪,因为Subversion不知道这些文件是相关的。

     

更好的方法是通知Subversion此更改实际上是重命名,您可以在“提交和检查修改”对话框中执行此操作。 只需选择旧名称(缺失)和新名称(无版本),然后使用上下文菜单→修复移动将两个文件配对为重命名

涵盖了许多其他案例。

<强>更新

当Subversion不知道它是重命名时,历史就会丢失,如下所示:

  • 旧文件名是 aa.txt ,并且手动重命名为 bb.txt
  • 新文件名 bb.txt 已添加到subversion
  • 在提交对话框中, aa.txt 显示为缺失,可以标记为已删除 bb.txt < / strong>显示为已添加
  • 结果是历史记录丢失,上下文菜单中的 SVN show log 仅显示 bb.txt

要保留文件历史记录,您需要使用上下文菜单(或命令行)中的重命名选项。 IF 您已经重命名了该文件:

  • 旧文件名 cc.txt 将显示为缺失
  • 选中显示无版本文件选项,查看新文件名 dd.txt ,标记为非版本化
  • 选择两个文件名,然后从上下文菜单中选择修复移动,这会导致 cc.txt 被标记为已删除 dd.txt 被标记为已添加(+)
  • 提交后
  • ,将保留历史记录,如果取消选中停止复制/重命名选项,则在日志中您将看到两个文件名。

因此,要恢复,在提交对话框中添加(+)表示将保留历史记录,添加表示丢失历史记录。在这两种情况下,旧文件名都将显示为已删除

更新2

当我说历史丢失时,请理解以前的信息仍然存在,但它不会出现在当前文件名的日志中,你必须手动跟踪它(这不是一件令人愉快的事情做)。

答案 1 :(得分:10)

右键单击文件&gt; TortoiseSVN&gt;重命名。

答案 2 :(得分:5)

通过TortoiseSVN上下文菜单重命名不会删除历史记录。如果要查看重命名之前的更改,请确保在查看更改日志时不使用--stop-on-copy标志:

svn log -v -r 0:N --limit 100 [--stop-on-copy] PATH
  or
svn log -v -r M:N [--stop-on-copy] PATH

见这里供参考: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-cli-main.html

答案 3 :(得分:3)

文件的历史记录不会被删除。以前的提交不会受到影响。但是,您可以使用svn move正确移动文件。

答案 4 :(得分:1)

对于移动和重命名等文件操作,我通常更喜欢使用TortoiseSVN Repo Browser,然后使用本地SVN更新。当然,如果您希望立即将操作提交到存储库,那么这是唯一合适的。

答案 5 :(得分:0)

删除并添加历史记录是在Subversion中重命名文件时要发生的事情。历史不会丢失。

VisualSvn和AnkhSvn都从Visual Studio中捕获正在重命名文件的事件,并做正确的事。