Atualizar item para revisão vs reverter para revisão

161

Comecei a usar o Subversion com o TortoiseSVN. Se eu abrir o log e clicar com o botão direito do mouse em uma revisão antiga, vejo duas opções que parecem reverter para uma versão mais antiga: "Atualizar item para revisão" e "Reverter para esta revisão".

Entendo que a atualização para uma revisão mais antiga é usada quando você deseja apenas olhar para uma versão antiga, mas não alterar o repositório. Reverter é quando você realmente errou e deseja que a revisão mais recente no repositório seja igual a uma versão mais antiga.

Digamos que a revisão HEAD seja 100 e eu volte a 95. Ele reverterá a mesclagem da minha cópia de trabalho de volta a 95. Então posso confirmar essa alteração no repositório, o que criaria a revisão 101 correta? Qual é a diferença se eu deveria voltar à revisão 95? Ainda não reverte as alterações das últimas revisões? Estou confuso sobre como o estado da minha cópia de trabalho difere após uma reversão ou atualização para uma revisão mais antiga.

Eric Anastas
fonte

Respostas:

205

Atualizar para revisão atualizará apenas os arquivos da sua cópia de trabalho para a revisão escolhida. Mas você não pode continuar trabalhando nessa revisão, pois o SVN reclamará que sua cópia de trabalho está desatualizada .

reverter para esta revisão desfará todas as alterações em sua cópia de trabalho que foram feitas após a revisão selecionada (no exemplo rev. 96,97,98,99,100) Sua cópia de trabalho agora está no estado modificado .

O conteúdo do arquivo de ambos os cenários é o mesmo, no entanto, no primeiro caso, você tem uma cópia de trabalho não modificada e não pode confirmar suas alterações (como a sua cópia de trabalho não está apontando para a HEAD rev 100); no segundo caso, você tem uma cópia de trabalho modificada apontando para a cabeça e você pode continuar trabalhando e se comprometendo

Peter Parker
fonte
1
OK, digamos que atualizo para revisão e minha cópia de trabalho está sem dados. Nada está me impedindo de alterar os arquivos. E se eu alterar um dos arquivos e tentar confirmá-lo. Acho que o subversion vai ver o conflito e me forçará a mesclar a versão mais recente do repositório na minha cópia de trabalho modificada antes de enviá-la.
Eric Anastas
5
Se você tentar cometer um item com mais velhos BASE-Revisão de cabeça, você vai ter uma "submissão falhou: a sua cópia de trabalho é propbably fora da data"
Peter Parker
como update toe revert to/fromtratar as alterações locais (alterações não confirmadas)?
BaltoStar
Ambos os métodos mantêm as alterações locais intactas, no entanto, as alterações locais podem causar conflitos nos dois casos e, no caso de reversão, as modificações da reversão são misturadas com todas as outras alterações locais dos usuários. Então, pelo menos, salve um patch de suas modificações ou se comprometa com um ramo.
Peter Parker
31

Para entender como o estado da sua cópia de trabalho é diferente nos dois cenários, você deve entender o conceito da revisão do BASE :

BASE

O número de revisão de um item em uma cópia de trabalho. Se o item foi modificado localmente, isso se refere à maneira como o item aparece sem essas modificações locais.

Sua cópia de trabalho contém um instantâneo de cada arquivo (oculto em uma pasta .svn) nesta revisão do BASE, o que significa que estava na última vez que foi recuperado do repositório . Isso explica por que as cópias de trabalho ocupam o dobro do espaço e como é possível examinar e até reverter as modificações locais sem uma conexão de rede.

Atualizar item para Revisão altera esta revisão base, tornando o BASE desatualizado. Quando você tenta confirmar modificações locais, o SVN notará que seu BASE não corresponde ao HEAD do repositório. A confirmação será recusada até que você faça uma atualização (e possivelmente uma mesclagem) para corrigir isso.

Reverter para revisão não altera BASE. Conceitualmente, é quase o mesmo que editar manualmente o arquivo para corresponder a uma revisão anterior.

Wim Coenen
fonte
Na resposta aceita "O conteúdo do arquivo de ambos os cenários é o mesmo". Então, por que se preocupar? Esta resposta explica a diferença máxima e explica por que "atualizar" versus "reverter" causa um comportamento diferente ao tentar confirmar.
Radarbob 26/10/2015
como update toe revert to/fromtratar as alterações locais (alterações não confirmadas)?
BaltoStar
5

Os arquivos em sua cópia de trabalho podem parecer exatamente os mesmos depois, mas ainda são ações muito diferentes - o repositório está em um estado completamente diferente e você terá diferentes opções disponíveis depois de reverter do que "atualizar" para uma revisão antiga .

Resumidamente, "atualizar para" afeta apenas sua cópia de trabalho, mas "reverter mesclar e confirmar" afetará o repositório.

Se você "atualizar" para uma revisão antiga, o repositório não mudou: no seu exemplo, a revisão HEAD ainda é 100. Você não precisa confirmar nada, pois está apenas mexendo na sua cópia de trabalho. Se você fizer modificações na sua cópia de trabalho e tentar confirmar, será informado que sua cópia de trabalho está desatualizada e será necessário atualizar antes de confirmar. Se alguém que trabalha no mesmo repositório executar uma "atualização" ou se você fizer o check-out de uma segunda cópia de trabalho, será r100.

No entanto, se você "reverter a mesclagem" para uma revisão antiga, sua cópia de trabalho ainda será baseada no HEAD (supondo que você esteja atualizado) - mas você está criando uma nova revisão para substituir as alterações indesejadas. Você precisa confirmar essas alterações, pois está alterando o repositório. Uma vez feito, quaisquer atualizações ou novas cópias de trabalho baseadas no HEAD serão exibidas na r101, com o conteúdo que você acabou de confirmar.

Zac Thompson
fonte
5

Atualize sua cópia de trabalho para a revisão selecionada. Útil se você deseja que sua cópia de trabalho reflita um tempo no passado ou se houve mais confirmações no repositório e você deseja atualizar sua cópia de trabalho uma etapa de cada vez. É melhor atualizar um diretório inteiro em sua cópia de trabalho, não apenas um arquivo; caso contrário, sua cópia de trabalho pode ser inconsistente. Isso é usado para testar uma finalidade específica da revisão. Se o teste foi concluído, você pode usar este comando para testar outra revisão ou usar a Atualização SVN para obter HEAD

Se você deseja desfazer uma alteração anterior permanentemente, use Reverter para esta revisão .

- do TSVN help doc

Se você atualizar sua cópia de trabalho para uma revisão anterior, isso só afetará sua própria cópia de trabalho; depois de fazer algumas alterações e desejar confirmar, você falhará; o TSVN alertará você para atualizar seu WC para a revisão mais recente primeiro Se você reverter para uma revisão, você pode se comprometer com repository.everyone voltará para a rev depois de fazer uma atualização.

prime23
fonte
2

O texto da referência da tartaruga:

Atualizar item para revisão Atualize sua cópia de trabalho para a revisão selecionada. Útil se você deseja que sua cópia de trabalho reflita um tempo no passado ou se houve mais confirmações no repositório e você deseja atualizar sua cópia de trabalho uma etapa de cada vez. É melhor atualizar um diretório inteiro em sua cópia de trabalho, não apenas um arquivo; caso contrário, sua cópia de trabalho pode ser inconsistente.

Se você deseja desfazer uma alteração anterior permanentemente, use Reverter para esta revisão.

Reverter para esta revisão Reverter para uma revisão anterior. Se você fez várias alterações e decide que realmente deseja voltar a como as coisas estavam na revisão N, este é o comando que você precisa. As alterações são desfeitas na sua cópia de trabalho, portanto, esta operação não afeta o repositório até você confirmar as alterações. Observe que isso desfará todas as alterações feitas após a revisão selecionada, substituindo o arquivo / pasta pela versão anterior.

Se sua cópia de trabalho estiver em um estado não modificado, depois de executar esta ação, sua cópia de trabalho será exibida como modificada. Se você já possui alterações locais, esse comando mesclará as alterações desfazer na sua cópia de trabalho.

O que está acontecendo internamente é que o Subversion realiza uma mesclagem inversa de todas as alterações feitas após a revisão selecionada, desfazendo o efeito dessas confirmações anteriores.

Se, após executar esta ação, você decidir que deseja desfazer a desfazer e recuperar sua cópia de trabalho ao estado anterior não modificado, use o TortoiseSVN → Revert no Windows Explorer, que descartará as modificações locais feitas por essa ação de mesclagem reversa.

Se você simplesmente deseja ver como era um arquivo ou pasta em uma revisão anterior, use Atualizar para revisar ou Salvar revisão como ....

Liker777
fonte