Estou trabalhando em um projeto com um amigo e quero retornar para uma versão mais antiga do nosso código e configurá-lo como atual. Como eu faço isso?
Estou usando "anksvn" no vs08.
Eu tenho a versão que eu quero no meu PC, mas a confirmação está falhando; A mensagem que recebo é "falha na confirmação, arquivo ou diretório está desatualizado".
Eu também tenho o cliente subversion no meu PC.
svn merge -r HEAD:140
.Você só pode cometer novas alterações na cabeça da história subversão.
O motivo pelo qual você não pode fazer nada diretamente com a boa cópia que você possui no seu PC é que suas
.svn
pastas sabem que é um código do passado, portanto, exige uma atualização antes de qualquer confirmação.Encontre o bom número de revisão e reverta
Encontre o número da revisão da cópia antiga que deseja.
Obtenha sua revisão atual com:
Ou, para verificar versões mais antigas do seu projeto, use:
até encontrar o número de revisão correto.
Anote o bom número da revisão (assumindo os
123
exemplos abaixo).Atualize para a revisão mais recente:
Desfazer todas as alterações entre a revisão desejada e a versão mais recente:
(o mesmo que a resposta de Jon Skeet acima.)
Se você não encontrar o número da revisão
Se você não consegue encontrar a cópia antiga e deseja apenas confirmar os arquivos atualmente no seu PC:
Faça uma cópia da sua versão boa (mas sem nenhuma
.svn
pasta):Agora verifique se você tem a versão mais recente:
Copie sua versão boa por cima da cópia de trabalho.
Este comando copiará e também excluirá os arquivos da árvore de trabalho que não estão na sua cópia boa, mas não afetarão as
.svn
pastas existentes .Se você não possui o rsync, pode usá-
cp -a
lo, mas também precisará excluir manualmente os arquivos indesejados.Você deve poder comprometer o que tem agora.
fonte
Basta usar esta linha
Você pode conhecer sua revisão atual usando:
fonte
A maneira padrão de usar a mesclagem para desfazer todo o check-in funciona muito bem, se é isso que você deseja fazer. Às vezes, porém, tudo o que você quer fazer é reverter um único arquivo. Não há maneira legítima de fazer isso, mas há um hack:
Use o subcomando de exportação do svn:
svn export http: // url para seu arquivo @ 123 / tmp / filename
(Onde 123 é o número da revisão de uma boa versão do arquivo.) Em seguida, mova ou copie esse arquivo único para substituir o antigo. Faça o check-in no arquivo modificado e pronto.
fonte
svn
também?svn cat -r 123 path-in-your-working-copy > path-in-your-working-copy
Um pouco mais da velha escola
então o habitual
fonte
Eu acho que isso é mais adequado:
Faça a mesclagem para trás, por exemplo, se o código confirmado contiver a revisão da revisão 5612 para 5616, apenas faça a mesclagem para trás. Isso funciona no meu fim.
Por exemplo:
Ele conteria um código mesclado de volta à revisão anterior, e você poderá confirmá-lo.
fonte
Foi isso que fiz e trabalhei para mim.
Quero desfazer as alterações em várias confirmações que fiz por determinados períodos e quero ir para o ponto de confirmação anterior.
Isso executará uma mesclagem reversa, desfazendo as alterações na sua cópia de trabalho.
Basta revisar o código e confirmar.
fonte
Clique com o botão direito do mouse na hierarquia mais alta que você deseja reverter >>
Revert
ouRevert to Revision
fonte
A maioria das respostas anteriores usa uma mesclagem reversa, e essa geralmente é a resposta certa. No entanto, há uma situação (que acabou de acontecer comigo) em que não está.
Alterei acidentalmente um arquivo com finais de linha Unix para finais de linha do DOS ao fazer uma pequena alteração e o confirmei. Isso é facilmente desfeito, alterando as terminações da linha e confirmando novamente, ou por uma mesclagem reversa, mas tem o efeito de tornar a
svn blame
lista minha edição como a fonte de todas as linhas do arquivo. (Curiosamente, o TortoiseSVN no Windows não é afetado por isso; apenas a linha de comandosvn blame
.)Se você deseja manter o histórico, conforme relatado por
svn blame
, acho que você precisa fazer o seguinte:A exclusão é um pouco assustadora, mas lembre-se de que você sempre tem o arquivo salvo no repositório, portanto, restaurá-lo não é grande coisa. Aqui está um código para ilustrar as etapas. Suponha que esse
xxx
seja o número de revisão da última cópia válida.Observe que, para uma cópia no repositório, o destino precisa ser um diretório, não um nome de arquivo.
fonte
Clique com o botão direito do mouse no projeto> Substituir por> Revisão ou URL> Selecione a revisão específica que deseja reverter.
Agora confirme a versão do código de atualização local no repositório. Isso reverterá a base de código para a revisão específica.
fonte
Há muitas respostas perigosas nesta página. Observe que desde o SVN versão 1.6, fazer uma atualização -r pode causar conflitos de árvore, que rapidamente se transformam em um pesadelo kafkeresque com potencial de perda de dados, no qual você procura informações sobre conflitos de árvore.
A maneira correta de reverter para uma versão é:
Onde 12345 é o número da versão. Não esqueça o ponto.
fonte
Sincronize com a versão mais antiga e confirme. Isso deve fazer o truque.
Aqui também está uma explicação para desfazer alterações.
fonte
A resposta de Jon Skeet é praticamente a solução em poucas palavras, no entanto, se você é como eu, pode querer uma explicação. O manual do Subversion chama isso de
Cherry-Pick Merge
Nas páginas do manual.
Exemplo:
Isso substituirá a cópia local [2983] (que, de acordo com a citação acima, deve estar sincronizada com o servidor - de sua responsabilidade) pela revisão 289 do servidor. A alteração ocorre localmente, o que significa que, se você fizer uma verificação geral limpa, as alterações poderão ser inspecionadas antes de serem confirmadas.
fonte
O seguinte funcionou para mim.
Eu tive muitas alterações locais e precisava descartar as que estão na cópia local e fazer check-out da última versão estável no SVN.
Verifique o status de todos os arquivos, incluindo os arquivos ignorados.
Grep todas as linhas para obter os arquivos adicionados e ignorados recentemente.
Substitua aqueles por
//
.e rm -rf todas as linhas.
svn status --no-ignore | grep '^ [? I]' | sed "s / ^ [? I] //" | xargs -I {} rm -rf "{}"
fonte