2009-10-20 1 views
1

Кто-то (кроме меня) случайно удалил файлы в TFS и проверил его. Затем он обнаружил свою ошибку и захотел заменить потерянные файлы, что он и сделал - от его собственный жесткий диск. Между его ошибкой и моим открытием, другие внесли изменения в смежные файлы. Теперь я хочу перевернуть удаленные файлы обратно в их состояние до удаления, но когда я попытаюсь, я получаю ошибку столкновения с именем файла между (если я правильно понимаю) исходные файлы и его замены.Откат TFS при удалении пользователя и создание нового с тем же именем

Я не могу свернуть весь проект, так как была проделана другая работа, я просто хочу вернуть эти файлы к тому, как они были «раньше».

У кого-нибудь была эта проблема и она была решена? Или нет решения.

ответ

1

Спасибо всем за ваш ввод. Для справки в будущем, вот как я окончательно решил дело:

Во-первых, я взял локальную копию файла.

В проводнике исходного кода я затем откат папки, содержащей файл, в набор изменений, где старый файл был удален, но новый файл еще не был представлен. Я восстановил файл и зарегистрировался, возвращая оригинал «из-за пределов».

После этого это был в значительной степени случай размещения моей локальной копии и восстановленного файла в инструменте diff (я использовал BeyondCompare BTW) и исправил восстановленный файл в соответствии с новой версией.

я мог бы сделать это из-за нескольких причин, а именно:

  • Удаление и повторное добавление файла было сделано в двух следующих друг за другом ревизиями.
  • Разница между восстановленным файлом и локальной копией была «довольно незначительной» (т. Е. Добавленный метод и несколько изменений в другом).

Я понятия не имею, что произошло бы, если бы мы, например, не пропустили этот файл до тех пор, пока пару недель спустя, где у нас было бы несколько изменений, внесенных в окружающий код. Я также не имею ни малейшего представления о том, какие существенные изменения, внесенные в локальную версию, имели в виду возможность восстановления.

0
  • Откат вашего решения в другой рабочей копии.
  • Вытащите удаленные файлы из этой рабочей копии и обратно в вашу текущую рабочую копию
  • Проверка этих файлов в текущем проекте.

Только проблема, которую я вижу здесь, может быть потеряна история удалённого файла.

+0

Это не касается конфликта пространства имен, в котором он работает. –

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, похоже, не обрабатывает идентификаторы удаления, как я и планировал.

В любом случае, этот скрипт должен делать то, что вы просили. Примечания:

  • заменяющие 12368 с ревизией, когда пользователь случайно удалил файлы
  • при желании, заменить удалить + в приезде 2 трубопровода с Destroy
  • это не возвращает какие-либо другие изменения в (включая другие изменения в № 12345), только те, которые вызвали столкновение имен файлов
Смежные вопросы