Pergunta

Alguém (além de mim) excluiu acidentalmente os arquivos no TFS e entrou em contato. Ele então descobriu seu erro e queria substituir os arquivos perdidos, o que ele fez - de seu próprio disco rígido. Entre seu erro e minha descoberta, outros fizeram alterações nos arquivos adjacentes. Agora, quero rolar os arquivos excluídos de volta ao seu estado antes do Excluir, mas quando tento, recebo um erro de colisão do nome do arquivo (se eu o entender corretamente) os arquivos originais e suas substituições.

Não posso reverter o projeto inteiro de volta, pois já houve outro trabalho, só quero obter esses arquivos de volta para como eles eram "antes".

Alguém já teve esse problema e resolveu? Ou não há solução.

Foi útil?

Solução

Obrigado a todos pela sua opinião. Para referência futura, foi assim que finalmente resolvi o caso:

Em primeiro lugar, peguei uma cópia local do arquivo.

No Fonte Control Explorer, recuei a pasta que contém o arquivo no alteração onde o arquivo antigo havia sido excluído, mas o novo arquivo ainda não estava presente. Eu desviei o arquivo e fiz o check -in, trazendo assim o original "do Beyond".

Depois disso, foi praticamente um caso de colocar minha cópia local e o arquivo recuperado em uma ferramenta Diff (usei além do Comcompare BTW) e corrigir o arquivo recuperado para corresponder à nova versão.

Eu poderia fazer isso devido a algumas razões, a saber:

  • A exclusão e a re-adição do arquivo foram feitas em duas alterações consecutivas.
  • A diferença entre o arquivo recuperado e a cópia local foi "bastante menor" (ou seja, um método adicional e alguns hacks de alteração em outro).

Não tenho idéia do que teria acontecido se, por exemplo, não tivéssemos perdido o arquivo em questão até algumas semanas depois, onde teríamos tido várias alterações feitas no código circundante. Também não tenho idéia do que as mudanças substanciais feitas na versão local significavam em termos de recuperação.

Outras dicas

  • Role de volta sua solução para outra cópia de trabalho.
  • Puxe os arquivos excluídos dessa cópia de trabalho e eles de volta à sua cópia de trabalho atual
  • O check -in esses arquivos no projeto atual.

O único problema que posso ver aqui é que você pode perder a história no arquivo excluído.

Parece um trabalho para o Ferramentas elétricas. Aqui está:

$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"

Como mencionado no comentário, o feio cordas analisando no oleoduto final não deve ser necessário em um mundo ideal de Powershell. Se as coisas funcionassem como pretendido, você pode remover essa linha (ou equivalente, substituí -la por SELECT-TFSITEM | ). Infelizmente, as ferramentas elétricas não parecem lidar com IDs de exclusão e também pretendi.

De qualquer forma, esse script deve fazer o que você pediu. Notas:

  • Substitua 12368 pela troca de alterações onde o usuário excluiu acidentalmente os arquivos
  • Se desejar, substitua o exclusão + verificação no 2º pipeline com destruição
  • Isso não reverte outras mudanças no sistema (incluindo outras alterações no #12345), apenas as que causam a colisão do nome do arquivo
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top