有人(除了我自己)意外地删除了TFS中的文件并将其签入。他随后发现了他的错误并想要从他自己的硬盘中替换丢失的文件。 在他的错误和我发现它之间,其他人已经对相邻文件进行了更改。 现在,我想将删除的文件回滚到删除前的状态,但是当我尝试时,我得到一个文件夹冲突错误(如果我理解正确的话)原始文件和他的替换。
由于已完成其他工作,我无法回滚整个项目,我只想将这些文件恢复到“之前”的状态。
有没有人遇到过这个问题并解决了?或者没有解决方案。
答案 0 :(得分:1)
谢谢大家的意见。 为了将来参考,我最终解决了这个问题:
首先,我拿了一份文件的本地副本。
在Source Control Explorer中,我然后将包含该文件的文件夹回滚到更改集,其中旧文件已被删除但新文件尚未存在。 我取消删除该文件并签入,从而将原始文件“从超出范围内”恢复。
之后,几乎就是将我的本地副本和恢复的文件放入diff工具(我使用BeyondCompare BTW)并更正恢复的文件以匹配新版本。
由于几个原因,我可以做到这一点,即:
我不知道如果我们在几周之后没有错过有问题的文件会发生什么,我们会对周围的代码进行一些更改。我也不清楚本地版本对可恢复性的任何重大改变是什么意思。
答案 1 :(得分:0)
我在这里只能看到问题,是否可能会丢失已删除文件的历史记录。
答案 2 :(得分: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。
无论如何,这个脚本应该按照你的要求做。注意: