SVN修复文件夹移动错误

11

有人在我的工作中将一个文件夹移动到了另一个位置。但是他没有进行适当的SVN移动,而是将它们添加为新文件并删除旧文件。这当然意味着项目的历史记录是错误的。我当时不在现场,自那以后文件已经被多次编辑,因此撤销修订并重新执行操作已经行不通了。

有没有办法可以修复这个问题,让SVN意识到它们完整的历史记录?

P.S. 我使用TortoiseSVN。

3个回答

7

无法编辑Subversion仓库的历史内容。您必须执行以下操作之一:

  1. 从错误修订版本开始重建仓库,提交正确的移动操作,然后提交该修订版本之后的内容。这需要每个人获取新的工作副本,或者将它们回退(svn update -rN)到要被替换的修订版本之前。
  2. 删除已移动的文件夹,以旧文件夹为模板重新创建它(svn copy <url of old dir>@<old rev> <new name in wc>),然后使用 svn merge 将自那时起的更改重新应用于旧位置文件夹的新副本中。

我对如何进行“svn合并”变更感到困惑,如果第一步是删除包含变更的移动文件夹,那该怎么办? - Steven Liekens
@StevenLiekens 在复制旧版本文件夹后再进行合并。 - Kevin Reid
@StevenLiekens 你可以将 <错误版本号>:HEAD 合并以获取在错误发生后和修复之前发生的更改。 - Kevin Reid
那么...将最后提交的修订版本(通过其URL)与仍处于修改状态的工作副本合并,以免被来自<old rev>文件的覆盖? - Steven Liekens
@StevenLiekens Merge需要一个_range_。该范围从错误修订版本到HEAD(即您提交修复程序之前的版本)。 是的,在移动的基础上。(我不确定svn是否会坚持让您在中间进行提交;如果确实如此,请继续执行。然后,当然要使用旧的head修订版本而不是HEAD作为范围的端点。) - Kevin Reid
显示剩余2条评论

2

以下是来自 TortoiseSVN FAQ 的内容:

如果您已经提交了删除的文件,那么您可以使用仓库浏览器,切换到文件仍然存在的版本,然后使用上下文菜单中的“复制到...”命令。将您的工作副本路径作为目标输入,删除的文件将从仓库复制到您的工作副本。

您也可以使用此方法恢复已删除的目录。

当然,您需要先删除(或重命名)同事添加的文件夹。


1

来自TortoiseSVN帮助 http://tortoisesvn.net/repairmoves.html

在工作副本中移动和重命名版本化文件必须始终使用相应的Subversion/TortoiseSVN命令进行操作。如果没有使用这些命令(例如使用Windows资源管理器),则会导致问题,因为Subversion不知道您已经移动/重命名了文件。

例如,如果您将名为myfile.txt的文件重命名为myfile2.txt而不使用Subversion/TortoiseSVN命令,则myfile.txt将显示为“丢失”,myfile2.txt将显示为“非版本控制”在提交对话框或检查修改对话框中。

如果发生这种情况,TortoiseSVN为您提供了一种简单的纠正方法。

据我所知,这是修复移动的唯一方法,但不确定move_and_then_added是否适用。


1
我认为这不是他所询问的内容。 - M4N
为什么不呢?只需撤销删除和添加,修复移动即可。嗯...失去所有的历史记录。 - Sergey Mirvoda

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