Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 撤消乌龟中的修复移动vn_Svn_Tortoisesvn - Fatal编程技术网

Svn 撤消乌龟中的修复移动vn

Svn 撤消乌龟中的修复移动vn,svn,tortoisesvn,Svn,Tortoisesvn,假设我已使用windows资源管理器将文件A重命名为文件B,并创建了一个新文件C 在乌龟SVN中,我意外地使用了文件A和C上的“修复移动”,而不是A和B。有没有一种简单的方法可以撤消修复(并使用正确的文件重做)?此时不会提交更改 我目前知道的唯一方法是恢复delete和add,这将恢复文件A,然后再次手动删除文件并正确重做关联。由于涉及多个文件,这在某种程度上涉及意外恢复本地更改的风险,因此我对是否有更好的方法感兴趣 注意:即使使用了TortoiseSVN来产生问题,使用svn控制台的回答也是可

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

在乌龟SVN中,我意外地使用了文件
A
C
上的“修复移动”,而不是
A
B
。有没有一种简单的方法可以撤消修复(并使用正确的文件重做)?此时不会提交更改

我目前知道的唯一方法是恢复delete和add,这将恢复文件
A
,然后再次手动删除文件并正确重做关联。由于涉及多个文件,这在某种程度上涉及意外恢复本地更改的风险,因此我对是否有更好的方法感兴趣

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


下面是一个逐步使用文件
A.txt
B.txt
C.txt
的示例:

A
之后,将重命名为
B
,并在本地添加
C

>svn st
!       A.txt
?       B.txt
?       C.txt
乌龟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传输历史记录。

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

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
同样的技术也可以在OrtoiseSVN UI中使用(还原A.txt,然后从浏览器中删除A.txt)。之所以这样做,是因为移动状态耦合到丢失的文件,而不是非版本文件。对C.txt的唯一修改是,它是通过使用repair-move命令添加的(您可能无论如何都想添加该命令)

“修复移动”命令仅在恰好包含两个文件时有效 已选择,一个具有“缺失”,另一个具有“未版本化” 地位只有这样,OrtoiseSVN才能找到重命名的文件 到哪个文件


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

我可能弄错了,但您不想做的是从暂存中删除更改,然后手动修复重命名,然后执行暂存提交。是这样吗?如果是的话,这个过程的自动版本到底是什么-即-你将如何告诉SVN你真正想要的更改?还有一些事情-实际的风险是什么?如果提交错误的文件,是否会丢失数据/工作?我们谈论的是多少文件?@LeftyGBalogh我希望有一种方法可以恢复SVN状态(例如
已删除
),而不必实际还原后面的文件。这将允许我正确地重做关联。风险是在项目元文件和代码文件之间获得不一致的状态,破坏版本历史记录或丢失本地更改。我们正在谈论一件过去发生在我身上的事情,将来可能还会发生。我在过去的事件中处理过它,但我对这样做的工作流程不满意。@LeftyGBalogh在本地更改文件后,
A
丢失
B
C
将是不受版本控制的新文件。在“修复移动”之后,
A
将被
删除
C
将被
添加+
。我想回到“修复移动”之前的问题,但是如果我只是
还原
,文件
A
将被物理还原。我想我开始理解你的困境了-
svn还原-递归文件夹\u name
将覆盖你对以前版本的当前更改-你想保留这个版本。您可以手动将所有内容恢复到您想要的状态,然后再次提交,但这是一个难题-其他人也会面临这样的问题:。还有一件事让我感到困惑——当你说“在那一点上没有提交更改。”——难道你不可以在所有文件都处于正确状态后自由提交吗?(顺便说一句,你不能改用Git吗?)谢谢你的回答。这也将
A
的历史与
C
联系起来,但我想我只是在寻求一个简单的解决方案,以解决乌龟在后台做了很多工作(修复动作),但它不支持简单的修复。这个附加的历史记录链接可能不是问题。啊,你说得对-提交
C
后也会获得
a
的历史记录!这很奇怪,因为在本例中,在提交之前,
svn stat
没有为文件
C
列出从A.txt移动的
>。不管怎样,我很高兴这对我有帮助。