假设我已使用Windows资源管理器将文件A
重命名为文件B
并创建了新文件C
。
在Tortoise SVN中,我意外地使用文件A
和C
上的“修复移动”,而不是A
和B
。是否有一种简单的方法来撤消修复(并使用正确的文件重做它)?此时未进行更改。
我目前唯一知道的方法是恢复删除和添加,这将恢复文件A
,然后再次手动删除文件并正确重做关联。如果涉及多个文件,这有可能会意外地恢复本地更改,所以如果有更好的方法,我会感兴趣。
注意:即使使用TortoiseSVN产生问题,使用svn控制台的答案也是可以接受的。
以下是文件A.txt
,B.txt
和C.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传输历史记录。
答案 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),就像错误的应用修复移动之前一样。因此,您可以在这两个文件之间再次应用修复移动。