如何告诉TortoiseSVN一个重命名的文件是被重命名而不是删除和重新添加?

15

这里我使用 VisualSVN 和 TortoiseSVN。

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

在Subversion中,无损重命名文件的最佳方法是什么?


你没有说明你想使用VisualSvn(即在Visual Studio中)还是TortoiseSvn来重命名它。 - Sander Rijken
6个回答

27

历史记录不会被删除,但您将失去历史记录的追踪,因为它看起来像是两个不相关的文件。

来自TortoiseSVN文档

如果您想对文件或文件夹进行简单的原地重命名,请使用上下文菜单→重命名... 输入项目的新名称,然后完成操作。

修复文件重命名

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

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

还有许多其他情况需要处理。

更新

当Subversion不知道它是一个重命名时,例如:

  • 旧文件名为aa.txt,手动重命名为bb.txt
  • 新文件名bb.txt已添加到Subversion中
  • 在提交对话框中,aa.txt出现为丢失,可以标记为删除,并且bb.txt出现为添加
  • 结果是历史记录丢失,从上下文菜单中的SVN显示日志只会显示bb.txt
为了保留文件历史记录,您需要使用上下文菜单(或命令行)中的重命名选项。如果您已经重命名了文件,则:
  • 旧的文件名cc.txt将显示为丢失
  • 勾选显示未版本化文件选项,以查看标记为非版本化的新文件名dd.txt
  • 选择两个文件名,并从上下文菜单中选择修复移动,结果是将cc.txt标记为删除,并将dd.txt标记为添加(+)
  • 提交后,历史记录将被保留,在日志中取消选中停止复制/重命名选项即可看到两个文件名。
因此,在提交对话框中,添加(+)表示历史记录将被保留,而添加则意味着丢失历史记录。在两种情况下,旧的文件名将出现为删除

更新 2

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


3
更好的方法是使用Subversion-aware IDE,它可以正确地重命名文件... - JesperE
让我看看:他已经重命名了文件,而且版本控制系统不知道(引用:“我注意到它说添加和删除”),所以我指引他去查看版本控制系统的文档,并进行了一些详细解释 - 引用了修复程序。那么请告诉我:为什么要给我点踩? - alexandrul
1
@Sander Rijken:除非保留历史记录,否则您将在提交对话框中看到已删除和已添加(+)的内容。 - alexandrul
长话短说,这篇文章可以简单地归纳为以下一句话:"选择两个文件名并从上下文菜单中选择'Repair move'。" 这就是重点,也是我今天学到的内容。 - Mike Nakis
1
这是因为右键单击并选择“显示日志”文件历史记录后,该可恶的“复制/重命名时停止”复选框选项。一旦我取消选中它,它终于向我显示了整个文件历史记录。我疯了,因为我使用上下文菜单将其重命名,并认为它仍然无法正常工作。非常感谢! - MikeTeeVee
显示剩余3条评论

10

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


2
VisualSVN标签和问题可能表明他已经使用VisualSVN重命名,如果是这种情况,它被正确地添加(带有历史记录)/删除(这就是Subversion重命名的含义)。 - Sander Rijken

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_zh_CN/tsvn-cli-main.html。这是关于IT技术的内容,可以帮助您更好地了解。

谢谢@Mike!我们遇到了一个情况,我们的根目录被重命名了几次,因此手动按URL进行差异比较似乎是唯一的解决方案。(对于长文件来说,责备有点痛苦。)在TortoiseSvn中确保停止复制未选中就像魔法一样奏效。然后,您可以在“显示日志”、“比较修订版本”、“查看文件列表”中选择开始/结束修订版本,并双击进行差异比较。 - AnneTheAgile

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

1
对于文件操作,比如移动和重命名,我通常更喜欢使用TortoiseSVN Repo Browser,然后再进行本地的SVN更新。当然,这只适用于你希望立即将操作提交到代码库的情况下。

0
在Subversion中重命名文件时,删除和添加历史记录是预期发生的事情。历史记录不会丢失。
VisualSvn和AnkhSvn都会捕获从Visual Studio接收到的文件重命名事件,并进行正确处理。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接