14

在这里使用 VisualSVN 和 TortoiseSVN。

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

在不丢失 Subversion 历史的情况下重命名文件的最佳方法是什么?

4

6 回答 6

24

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

来自TortoiseSVN 文档

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

修复文件重命名

有时,您友好的 IDE 会在重构练习中为您重命名文件,当然它不会告诉 Subversion。如果您尝试提交您的更改,Subversion 将看到旧文件名丢失,而新文件名则视为未版本化文件。你可以检查新的文件名来添加它,但是你会丢失历史跟踪,因为 Subversion 不知道这些文件是相关的。

更好的方法是通知 Subversion 这个更改实际上是重命名,您可以在 Commit 和 Check for Modifications 对话框中执行此操作。只需选择旧名称(缺失)和新名称(未版本化),然后使用 Context Menu → Repair Move 将两个文件配对为 rename

涵盖了许多其他情况。

更新

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

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

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

  • 旧文件名cc.txt将显示为缺失
  • 检查Show unversioned files选项以查看新文件名dd.txt,它被标记为non-versioned
  • 选择两个文件名并从上下文菜单中选择修复移动,这会导致cc.txt被标记为已删除,而dd.txt被标记为已添加 (+)
  • 提交后,历史记录将被保留,如果您取消选中Stop on copy/rename选项,您将在日志中看到两个文件名。

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

更新 2

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

于 2010-02-03T21:07:45.103 回答
10

右键单击文件 > TortoiseSVN > 重命名。

于 2010-02-03T21:04:55.160 回答
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

于 2010-02-03T21:07:16.993 回答
3

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

于 2010-02-03T21:03:53.193 回答
1

对于像移动和重命名这样的文件操作,我通常更喜欢使用TortoiseSVN Repo Browser,然后是本地 SVN 更新。当然,这仅在您希望您的操作立即提交到存储库时才合适。

于 2010-02-04T10:16:06.137 回答
0

在 Subversion 中重命名文件时,预期会发生带有历史记录的删除和添加。历史不会丢失。

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

于 2010-02-03T22:41:29.477 回答