2009-10-20 54 views
1

有人(不是我)在TFS中意外删除了文件并将其签入。然后他发现了错误并想要替换丢失的文件 - 他从 - 他自己的硬盘。 在他的错误和我发现它之间,其他人已经改变了相邻的文件。 现在,我想将删除的文件恢复到删除前的状态,但是当我尝试获取原始文件和替换文件之间的文件名冲突错误(如果我理解正确的话)。当用户删除文件并创建了一个新名称的同名文件时,TFS回滚

由于完成了其他工作,我无法将整个项目回滚,我只想将这些文件恢复到“之前”的状态。

有没有人有这个问题,并解决了它?或者是没有解决方案。

回答

1

谢谢大家的意见。 为了将来的参考,这是我终于如何解决的情况下:

首先,我拿了本地文件的副本。

在源代码管理资源管理器中,我然后将包含该文件的文件夹回滚到旧文件已被删除,但新文件尚未存在的变更集。 我将文件取消删除并签入,从而将原始文件“从远处”带回。

之后,它几乎是把我的本地副本和恢复的文件放入diff工具(我使用BeyondCompare BTW)并纠正恢复的文件以匹配新版本的情况。

我能做到这一点,由于几个原因,即:

  • 删除和重新添加的文件是在两个连续的变更完成。
  • 恢复的文件和本地副本之间的区别是“非常小”(即,在另一个方法中增加了一个方法和一些更改攻击)。

我不知道会发生什么,如果我们例如没有错过有问题的文件,直到几周后,我们会对周围的代码进行一些更改。我也不知道对本地版本做出的任何实质性修改对于可恢复性而言意味着什么。

0
  • 将您的解决方案回滚到另一个工作副本。
  • 将已删除的文件从该工作副本中拉出并返回到当前的工作副本
  • 将这些文件检入当前项目。

唯一的问题我可以在这里看到,你可能会在删除的文件上失去历史。

+0

这并没有解决他遇到的命名空间冲突。 – 2009-10-20 15:47:01

0

听起来像Power Tools的工作。在这里你去:

$deletedFiles = 
    Get-TfsChangeset 12345| 
    % { $_.changes } | 
    ? { $_.changetype.tostring().contains("Delete") } | 
    % { $_.item.serveritem } 

$deletedFiles | 
    Add-TfsPendingChange -Delete | 
    New-TfsChangeset -Comment "Delete mistakenly re-added files" 

$deletedFiles |  
    Get-TfsChildItem -Deleted | 
    ? { $_.changesetid -eq 12345 } | 
    # this bit of ugliness is required by a bug in the Power Tools 
    % { "$($_.serveritem);X$($_.deletionid)" } | 
    Add-TfsPendingChange -Undelete | 
    New-TfsChangeset -Comment "Undelete old files" 

正如评论提到,丑陋的字符串中的最后管线解析不应该在一个理想的世界PowerShell的必要。如果事情按预期工作,您可以删除该行(或等同替换为Select-TfsItem |)。不幸的是,Power Tools看起来并没有像我打算的那样处理删除ID。

无论如何,这个脚本应该做你所问的。注:

  • 与使用者不小心删除的文件
  • 如果需要变更代替12368,更换删除+与第二管道签销毁
  • 这不会恢复在任何其他变化系统(包括#12345中的其他更改),只是导致文件名冲突的那些文件。
相关问题