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