有人在我的工作中将一个文件夹移动到了另一个位置。但是他没有进行适当的SVN移动,而是将它们添加为新文件并删除旧文件。这当然意味着项目的历史记录是错误的。我当时不在现场,自那以后文件已经被多次编辑,因此撤销修订并重新执行操作已经行不通了。
有没有办法可以修复这个问题,让SVN意识到它们完整的历史记录?
P.S. 我使用TortoiseSVN。
有人在我的工作中将一个文件夹移动到了另一个位置。但是他没有进行适当的SVN移动,而是将它们添加为新文件并删除旧文件。这当然意味着项目的历史记录是错误的。我当时不在现场,自那以后文件已经被多次编辑,因此撤销修订并重新执行操作已经行不通了。
有没有办法可以修复这个问题,让SVN意识到它们完整的历史记录?
P.S. 我使用TortoiseSVN。
无法编辑Subversion仓库的历史内容。您必须执行以下操作之一:
svn update -rN
)到要被替换的修订版本之前。svn copy <url of old dir>@<old rev> <new name in wc>
),然后使用 svn merge
将自那时起的更改重新应用于旧位置文件夹的新副本中。以下是来自 TortoiseSVN FAQ 的内容:
如果您已经提交了删除的文件,那么您可以使用仓库浏览器,切换到文件仍然存在的版本,然后使用上下文菜单中的“复制到...”命令。将您的工作副本路径作为目标输入,删除的文件将从仓库复制到您的工作副本。
您也可以使用此方法恢复已删除的目录。
当然,您需要先删除(或重命名)同事添加的文件夹。
来自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是否适用。
<错误版本号>:HEAD
合并以获取在错误发生后和修复之前发生的更改。 - Kevin Reid<old rev>
文件的覆盖? - Steven Liekens