在TortoiseSVN中撤消修复移动

时间:2017-02-20 14:10:47

标签: svn tortoisesvn

假设我已使用Windows资源管理器将文件A重命名为文件B并创建了新文件C

在Tortoise SVN中,我意外地使用文件AC上的“修复移动”,而不是AB。是否有一种简单的方法来撤消修复(并使用正确的文件重做它)?此时未进行更改。

我目前唯一知道的方法是恢复删除和添加,这将恢复文件A,然后再次手动删除文件并正确重做关联。如果涉及多个文件,这有可能会意外地恢复本地更改,所以如果有更好的方法,我会感兴趣。

注意:即使使用TortoiseSVN产生问题,使用svn控制台的答案也是可以接受的。

以下是文件A.txtB.txtC.txt的示例:

A重命名为B并在本地添加C

>svn st
!       A.txt
?       B.txt
?       C.txt

在Tortoise SVN之后“修复移动”被错误地应用A - > C

>svn st
D       A.txt
        > moved to C.txt
?       B.txt
A  +    C.txt
        > moved from A.txt

我的工作流程来解决这个问题,我并不满意:

>ren C.txt C.txt.bak
>svn revert C.txt A.txt
>ren C.txt.bak C.txt
>del A.txt

导致我可以使用正确的文件重做修复的起始情况

>svn st
!       A.txt
?       B.txt
?       C.txt

我喜欢什么,但似乎不存在

svn mv --force --ignore-files A.txt B.txt
svn add --force C.txt

以某种方式忽略A已被标记为已删除并允许从A到B的历史转移,将C重新解释为干净添加,而不是从A传输历史记录。

1 个答案:

答案 0 :(得分:2)

仅在A.txt上有2个命令,而不是当前工作流中的4个命令(也影响C.txt)。在TortoiseSVN“修复移动”未正确应用后,执行:

svn revert A.txt
del A.txt

svn stat将是:

!       A.txt
?       B.txt
A  +    C.txt

从Tortoise SVN,您现在可以在A.txt和B.txt之间“修复移动”,从而产生正确的状态:

D       A.txt
        > moved to B.txt
A  +    B.txt
        > moved from A.txt
A  +    C.txt

可以在TortoiseSVN UI中使用相同的技术(还原A.txt,然后从资源管理器中删除A.txt)。这样做的原因是移动状态耦合到丢失的文件,而不是非版本化文件。对.txt的唯一修改是,它是通过使用修复移动命令添加的(无论如何你想添加它)。

  

“修复移动”命令仅在两个文件正好时才有效   选中,一个有“失踪”,另一个有“非版本”   状态。只有这样,TortoiseSVN才能找到重命名的文件   到哪个文件。

https://tortoisesvn.net/repairmoves.html

恢复后&删除A.txt后再次出现丢失文件(A.txt)和非版本化文件(B.txt),就像错误的应用修复移动之前一样。因此,您可以在这两个文件之间再次应用修复移动。