2017-02-20 65 views
9

假设我已经使用Windows资源管理器将文件A更名为文件B,并创建了新的文件C撤销TortoiseSVN中的修复移动

在Tortoise SVN中,我无意中使用文件AC上的“修复移动”,而不是AB。有没有简单的方法来撤消修复(并用正确的文件重做)?在这一点上不会进行更改。

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

注意:尽管TortoiseSVN被用来产生问题,但svn控制台的答案也是可以接受的。


这里是文件A.txtB.txt的例子和C.txt一步一步:

A被重命名为BC被本地添加

>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到B的历史记录转移,从A重新诠释C作为清洁的添加而不是transfering历史

+0

我可能会弄错它,但不想做的是从分段中删除更改,然后手动修复重命名,然后执行阶段提交。是对的吗?如果是这样,那么这个过程的自动版本究竟是什么 - 即 - 你将如何告诉SVN你真正想要的变化? –

+0

还有几件事 - 风险究竟是什么?如果您提交错误的文件,您会丢失数据/工作吗?我们在谈论多少个文件? –

+0

@LeftyGBalogh我莫名其妙地希望有一种方法可以恢复SVN状态(例如'deleted')而不实际恢复文件。这将允许我正确地重做关联。风险是在项目元文件和代码文件之间获得不一致的状态,破坏版本历史记录或丢失本地更改。我们正在谈论过去发生在我身上的一件事情,并可能在未来再次发生。我照顾过去的事件,但我对我的工作流程并不满意。 – grek40

回答

2

还有就是涉及到的方式对A. 2个命令txt而不是当前工作流程中的4个命令(也影响C.txt)。 TortoiseSVN的 “修复移动” 是正确应用后,执行:

svn revert A.txt 
del A.txt 

svn stat将是:

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

从龟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)。之所以这么做,是因为移动状态与缺少的文件相关联,而不是与非版本化的文件相关联。对C的唯一修改txt是,它是通过使用修复移动命令添加的(无论如何你都可以添加)。

“修复移动”命令只有在完全相同的两个文件是 选择,一个具有“失踪”和其他“非版本” 状态的作品。只有这样TortoiseSVN才能找出哪个文件被重命名为 哪个文件。

https://tortoisesvn.net/repairmoves.html

恢复A.TXT的&删除后你结束了丢失的文件(A.TXT)和非版本的文件(B.txt)再次,由于不正确应用修复前移动。因此,您可以在这两个文件之间再次应用修复移动。

+1

感谢您的回答。这也将'A'的历史链接到'C',但我想我只是要求一个简单的解决方案,以便TortoiseSVN在后台完成一些工作(修复移动),并且它不支持容易修复。这个额外的历史链接可能不是问题。 – grek40

+0

啊,你是对的 - 在提交'C'后''也有'A'的历史!这很奇怪,因为在这种情况下提交之前''svn stat'没有列出''从文件'C'的A.txt'移动。无论如何,我很高兴它有帮助。 – Constantin