在这里使用 VisualSVN 和 TortoiseSVN。
我已经重命名了我的文件。我注意到它说添加和删除对我来说意味着历史可能会被删除?
在不丢失 Subversion 历史的情况下重命名文件的最佳方法是什么?
在这里使用 VisualSVN 和 TortoiseSVN。
我已经重命名了我的文件。我注意到它说添加和删除对我来说意味着历史可能会被删除?
在不丢失 Subversion 历史的情况下重命名文件的最佳方法是什么?
历史不会被删除,但您会丢失历史跟踪,因为它似乎是两个不相关的文件。
如果您想对文件或文件夹进行简单的就地重命名,请使用上下文菜单 → 重命名... 输入项目的新名称即可。
修复文件重命名
有时,您友好的 IDE 会在重构练习中为您重命名文件,当然它不会告诉 Subversion。如果您尝试提交您的更改,Subversion 将看到旧文件名丢失,而新文件名则视为未版本化文件。你可以检查新的文件名来添加它,但是你会丢失历史跟踪,因为 Subversion 不知道这些文件是相关的。
更好的方法是通知 Subversion 这个更改实际上是重命名,您可以在 Commit 和 Check for Modifications 对话框中执行此操作。只需选择旧名称(缺失)和新名称(未版本化),然后使用 Context Menu → Repair Move 将两个文件配对为 rename。
涵盖了许多其他情况。
更新
当 Subversion 不知道它是重命名时,历史记录会丢失,如下所示:
要保留文件历史记录,您需要使用上下文菜单(或命令行)中的重命名选项。如果您已经重命名了文件,则:
因此,要恢复,在提交对话框中添加 (+)意味着将保留历史记录,添加意味着丢失历史记录。在这两种情况下,旧文件名都将显示为deleted。
更新 2
当我说历史丢失时,请理解之前的信息仍然存在,但是它不会出现在当前文件名的日志中,并且必须手动跟踪它(这不是一件很愉快的事情) .
右键单击文件 > TortoiseSVN > 重命名。
从 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
文件的历史不会被删除。以前的提交不会受到影响。但是,您可以使用svn move
来正确移动文件。
对于像移动和重命名这样的文件操作,我通常更喜欢使用TortoiseSVN Repo Browser,然后是本地 SVN 更新。当然,这仅在您希望您的操作立即提交到存储库时才合适。
在 Subversion 中重命名文件时,预期会发生带有历史记录的删除和添加。历史不会丢失。
VisualSvn 和 AnkhSvn 都从 Visual Studio 捕获文件被重命名的事件,并做正确的事情。