撤消TortoiseSVN中的修复移动

gre*_*k40 9 svn tortoisesvn

假设我已经使用Windows资源管理器重命名了File Ato File B并创建了一个新文件C.

在龟SVN,我无意中用在文件中的"修复移动" AC,而不是AB.是否有一种简单的方法来撤消修复(并使用正确的文件重做它)?此时未提交更改.

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

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


以下是使用Files的示例A.txt,B.txtC.txt逐步进行:

之后A重命名为BC在本地添加

>svn st
!       A.txt
?       B.txt
?       C.txt
Run Code Online (Sandbox Code Playgroud)

在Tortoise SVN"修复移动"被错误地应用A- >C

>svn st
D       A.txt
        > moved to C.txt
?       B.txt
A  +    C.txt
        > moved from A.txt
Run Code Online (Sandbox Code Playgroud)

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

>ren C.txt C.txt.bak
>svn revert C.txt A.txt
>ren C.txt.bak C.txt
>del A.txt
Run Code Online (Sandbox Code Playgroud)

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

>svn st
!       A.txt
?       B.txt
?       C.txt
Run Code Online (Sandbox Code Playgroud)

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

svn mv --force --ignore-files A.txt B.txt
svn add --force C.txt
Run Code Online (Sandbox Code Playgroud)

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

Con*_*tin 2

有一种方法只涉及 A.txt 上的 2 个命令,而不是当前工作流程中的 4 个命令(也影响 C.txt)。TortoiseSVN“修复移动”被错误应用后,执行:

svn revert A.txt
del A.txt
Run Code Online (Sandbox Code Playgroud)

svn stat将:

!       A.txt
?       B.txt
A  +    C.txt
Run Code Online (Sandbox Code Playgroud)

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

D       A.txt
        > moved to B.txt
A  +    B.txt
        > moved from A.txt
A  +    C.txt
Run Code Online (Sandbox Code Playgroud)

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

仅当选择了两个文件时,“修复移动”命令才有效,一个文件处于“丢失”状态,另一个处于“非版本控制”状态。只有这样,TortoiseSVN 才能找出哪个文件被重命名为哪个文件。

https://tortoisesvn.net/repairmoves.html

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