Desfaz um movimento de reparo no TortoiseSVN

9

Suponha que eu tenha renomeado o arquivo A para o arquivo B com o windows explorer e criado um novo arquivo C .

No Tortoise SVN, eu uso acidentalmente o "Repair Move" no arquivo A e C , em vez de A e B . Existe uma maneira fácil de desfazer o reparo (e refazê-lo com os arquivos corretos)? As alterações não são confirmadas nesse ponto.

A única maneira que eu estou ciente atualmente é reverter a exclusão e adicionar, que irá restaurar o arquivo A , em seguida, exclua manualmente o arquivo novamente e refazer as associações corretamente. Com vários arquivos envolvidos, isso envolve o risco de reverter acidentalmente as alterações locais, então estou interessado em saber se existe uma maneira melhor.

Nota: embora o TortoiseSVN seja usado para produzir o problema, uma resposta com o console svn também é aceitável.

Aqui está o exemplo com os arquivos A.txt , B.txt e C.txt passo a passo:

Depois que A é renomeado para B e C é adicionado localmente

>svn st
!       A.txt
?       B.txt
?       C.txt

Após o Tortoise SVN, o "movimento de reparo" é aplicado incorretamente A - > C

>svn st
D       A.txt
        > moved to C.txt
?       B.txt
A  +    C.txt
        > moved from A.txt

Meu fluxo de trabalho para corrigir a situação, com o qual não estou muito feliz:

>ren C.txt C.txt.bak
>svn revert C.txt A.txt
>ren C.txt.bak C.txt
>del A.txt

Resultando na situação inicial de onde posso refazer o reparo com arquivos corretos

>svn st
!       A.txt
?       B.txt
?       C.txt

O que eu adoraria, mas que não parece existir

svn mv --force --ignore-files A.txt B.txt
svn add --force C.txt

de uma maneira que ignora que A já está marcado como deletado e permite uma transferência de histórico de A para B, reinterpretando C como clean add ao invés de transferir histórico de A.

    
por grek40 20.02.2017 в 15:10
fonte

1 resposta

2

Existe uma maneira de envolver apenas 2 comandos em A.txt, em vez dos 4 comandos em seu fluxo de trabalho atual (afetando também o C.txt). Depois que o TortoiseSVN "repair move" é aplicado incorretamente, execute:

svn revert A.txt
del A.txt

svn stat será:

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

Do Tortoise SVN você pode agora "reparar o movimento" entre A.txt e B.txt, resultando no estado correto:

D       A.txt
        > moved to B.txt
A  +    B.txt
        > moved from A.txt
A  +    C.txt

A mesma técnica pode ser usada na interface do TortoiseSVN (reverta A.txt, depois apague A.txt do explorador). A razão pela qual isso funciona é que o estado de movimentação é acoplado ao arquivo ausente, não ao arquivo não versionado. A única modificação no C.txt é que ele foi adicionado usando o comando repair move (que você queria adicionar provavelmente de qualquer maneira).

  

O comando "Reparar movimento" só funciona se exatamente dois arquivos forem   selecionado, um com o "ausente" e o outro com o "sem versão"   status. Só assim o TortoiseSVN pode descobrir qual arquivo foi renomeado   para qual arquivo.

link

Depois de reverter & amp; exclusão de A.txt você acaba com um arquivo ausente (A.txt) e um arquivo não versionado (B.txt) novamente, como antes do movimento de reparo aplicado incorreto. Assim, você pode aplicar o reparo novamente entre esses dois arquivos.

    
por Constantin 09.03.2017 / 06:32
fonte