Pergunta

Digamos que eu tenha cometido algumas alterações incorretas no repositório Subversion.Aí eu cometo boas mudanças, que quero manter.

Qual seria a maneira mais fácil de reverter essas alterações ruins no Eclipse e manter as alterações boas?Supondo que os arquivos relacionados às alterações ruins não sejam iguais aos relacionados às alterações boas.Como as coisas mudam se boas alterações forem feitas nos mesmos arquivos que alterações ruins?

Estou procurando principalmente uma maneira de fazer isso por meio de plug-ins do Eclipse (Subclipse ou Subversive), mas os comandos de linha de comando também são interessantes.

Foi útil?

Solução

Você tem duas opções para fazer isso.

O Quick and Dirty está selecionando seus arquivos (usando Ctrl) na visualização Project Explorer, clique com o botão direito neles e escolha Replace with... e então você escolhe a melhor opção para você, desde Latest from Repository, ou alguns Branch versão.Depois de obter esses arquivos, você os modifica (com um espaço, ou corrige algo, sua chamada e commitá-los para criar uma revisão mais recente.

Uma maneira mais limpa é escolher Merge no menu da equipe e navegue pelo assistente que o ajudará a recuperar a versão antiga na revisão real.

Ambos os comandos têm seus equivalentes de linha de comando: svn revert e svn merge.

Outras dicas

Em Eclipse Ganimedes (Subclipse)

Selecione o projeto/arquivo que contém alterações incorretas e, no menu pop-up, escolha:

Equipe -> Mostrar Histórico

As revisões relacionadas a esse projeto/arquivo serão mostradas na aba Histórico.

Encontre a revisão onde as "alterações incorretas" foram confirmadas e no menu pop-up escolha:

Reverter alterações da revisão X

Isso mesclará as alterações nos arquivos modificados na revisão incorreta, com a revisão anterior à revisão incorreta.

Existem dois cenários a partir daqui:

  1. Se você não cometeu nenhuma alteração nesse arquivo (a revisão incorreta é a última revisão desse arquivo), ele simplesmente removerá as alterações feitas na revisão incorreta.Essas alterações são mescladas em sua cópia de trabalho, então você precisa confirmá-las.

  2. Se você cometeu algumas alterações nesse arquivo (a revisão incorreta não é a última revisão desse arquivo), você terá que resolver o conflito manualmente.Digamos que você tenha o arquivo readme.txt e o número de revisão incorreto seja 33.Além disso, você fez outro commit para esse arquivo na revisão 34.Depois de escolher Reverter alterações da revisão 33 você terá o seguinte em sua cópia de trabalho:

leiame.txt.merge-left.r33 - revisão ruim

leiame.txt.merge-right.r32 - antes da revisão ruim

leiame.txt.working - versão da cópia de trabalho (igual à r34 se você não tiver nenhuma alteração não confirmada)

O readme.txt original será marcado como conflitante e conterá a versão mesclada (onde as alterações da revisão incorreta são removidas) com alguns marcadores (<<<<<<< .working etc).Se você deseja apenas remover as alterações de uma revisão incorreta e manter as alterações feitas depois disso, tudo o que você precisa fazer é remover os marcadores.Caso contrário, você pode copiar o conteúdo de um dos três arquivos mencionados acima para o arquivo original.Seja qual for a sua escolha, quando terminar, marque o conflito como resolvido por

Equipe - Marcar Resolvido

Os arquivos temporários serão removidos e seu arquivo será marcado como alterado.Como em 1, você precisa confirmar as alterações.

Observe que isso não remove a revisão do histórico de revisões no repositório svn.Você simplesmente fez uma nova revisão onde as alterações da revisão incorreta são removidas.

Se você quiser fazer um arquivo por vez, você pode ir para a visualização Histórico do arquivo, assumindo que você tenha um plugin Eclipse SVN instalado."Equipe->Mostrar Histórico"

Na visualização Histórico, encontre a última versão válida desse arquivo, clique com o botão direito e escolha "Obter Conteúdo".Isso substituirá sua versão atual pelo conteúdo dessa versão.Então você pode confirmar as alterações quando tiver consertado tudo.

No Eclipse usando Subversive:

Clique com o botão direito no seu projeto > Equipe > Mesclar

Na janela de mesclagem, selecione as revisões que deseja reverter normalmente, mas também ative a caixa de seleção "Mesclagem invertida".

Mesclar normalmente.

Eu escrevi algumas postagens no blog sobre esse assunto.Um que é centrado no Subclipse: http://markphip.blogspot.com/2007/01/how-to-undo-commit-in-subversion.html e aquele que é centrado na linha de comando: http://blogs.collab.net/subversion/2007/07/second-chances/

O svnbook possui uma seção sobre como o Subversion permite reverter as alterações de uma revisão específica sem afetar as alterações que ocorreram nas revisões subsequentes:

http://svnbook.red-bean.com/en/1.4/svn.branchmerge.commonuses.html#svn.branchmerge.commonuses.undo

Eu não uso muito o Eclipse, mas no TortoiseSVN você pode fazer isso na caixa de diálogo de log;simplesmente clique com o botão direito na revisão que deseja reverter e selecione "Reverter alterações desta revisão".

Caso os arquivos para os quais você deseja reverter "alterações ruins" tenham "alterações boas" nas revisões subsequentes, o processo é o mesmo.As alterações da revisão "ruim" serão revertidas, deixando as alterações das revisões "boas" intactas; no entanto, você poderá ter conflitos.

Tenho o mesmo problema, mas a opção CleanUp Eclipse não funciona para mim.

1) instale o TortoiseSVN
2) Vá para o Windows Explorer e clique com o botão direito no diretório do seu projeto
Opção CleanUp de 3 opções (marcando a opção break lock)

Funciona.

Espero que isso ajude alguém.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top