"Desadicionar" um arquivo para o svn antes de confirmar


200

Eu estava no meio de fazer um svn recursivo add / commit, e uma pasta que não tinha as propriedades adequadas de ignorar foi incluída. Eu tenho cerca de 100 arquivos binários carregados com versão agora, mas ainda não o comprometi.

Qual é a maneira mais fácil de desfazer isso, sem excluir todos os documentos?

Respostas:


244

Usar svn revert --recursive folder_name


Aviso

svn reverté inerentemente perigoso, pois seu objetivo é jogar fora os dados - ou seja, suas alterações não confirmadas. Depois de revertido, o Subversion não oferece como recuperar essas alterações não confirmadas.

http://svnbook.red-bean.com/en/1.7/svn.ref.svn.c.revert.html


12
Para expandir isso - revertsem uma revisão especificada, desfaz-se qualquer alteração ocorrida desde o último check-out, incluindo adicionar / excluir alterações de agendamento, para o (s) arquivo (s) especificado (s).
— Amber

onde folder_name é a pasta pai da pasta onde você fez o "Adicionar" comando
— MacGyver

28
Esta resposta é perigosamente incorreta - desestabilizará suas alterações REMOVENDO AS CÓPIAS LOCAIS DOS ARQUIVOS. A resposta de Brian Lacy abaixo é muito melhor.
— Henry Henrinson

6
Pessoal, isso responde à pergunta original: um arquivo ou pasta que foi adicionado e depois revertido, volta a ser sem versão, sem ser excluído. Isso é exatamente o que a pergunta faz. Se você o usa em arquivos modificados, é claro que os reverte: mas essa não era a questão. Esse é mesmo o caso de uso muito específico mostrado na página vinculada!
— Julien Lebosquain

2
@JulienLebosquain Ok, acho que você e eu entendemos essa frase de maneira diferente: sem excluir todos os documentos . Infelizmente, svn reverttambém exclui as alterações recém-adicionadas na cópia de trabalho, restaurando a HEADversão mais recente. Tirei meu voto negativo, mas ainda sinto que o aviso é importante.
— jpaugh

145

svn rm --keep-local folder_name

Nota: No svn 1.5.4, o svn rm exclui arquivos não versionados, mesmo quando --keep-local é especificado. Consulte http://svn.haxx.se/users/archive-2009-11/0058.shtml para obter mais informações.


9
É bom saber, pois permite que você simplesmente desfaça o "svn add" sem perder as alterações!
— Ryan H.

1
Você tem certeza de que o SVN 1.5.4 exclui arquivos não versionados? O relatório não era reprodutível e não há outro e-mail sobre isso.
— Quentin Pradet

4
Essa é a melhor resposta se você deseja "não adicionar" os arquivos, mas ainda os mantém. Após esse comando, os arquivos ainda estarão lá com o? status.
— Robin Zimmermann

32

Tente svn revert filenamepara cada arquivo que você não precisa e ainda não foi confirmado. Ou, alternativamente, faça svn revert -R foldera pasta problemática e refaça a operação com a configuração de ignição correta.

A partir da documentação:

 you can undo any scheduling operations:

$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops

4
Não! Reverter é inseguro, como ele perde todas as alterações locais
— jpaugh

@ jpaugh - Foi exatamente isso que escrevi na resposta, não?
— bobah

1
O que o OP pediu (e o que eu esperava) foi um comando para desfazer a adição sem perder as alterações locais. svn revert. Nenhuma das respostas aqui menciona o fato de que as alterações locais serão perdidas pela reversão.
— 21416 jpaugh

3

Processo completo (pacote svn Unix):

Verifique se os arquivos não estão no SVN:

> svn st -u folder 
? folder

Adicione tudo (incluindo arquivos ignorados):

> svn add folder
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt
A   folder/folderToIgnore
A   folder/folderToIgnore/fileToIgnore1.txt
A   fileToIgnore2.txt

Remova o sinalizador "Adicionar" a todos os arquivos * Ignorar *:

> cd folder

> svn revert --recursive folderToIgnore
Reverted 'folderToIgnore'
Reverted 'folderToIgnore/fileToIgnore1.txt'


> svn revert fileToIgnore2.txt
Reverted 'fileToIgnore2.txt'

Editar svn ignore na pasta

svn propedit svn:ignore .

Adicione duas linhas simples com apenas o seguinte:

folderToIgnore
fileToIgnore2.txt

Verifique quais arquivos serão enviados e confirmados:

> cd ..

> svn st -u
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt


> svn ci -m "Commit message here"

1
Obrigado, exatamente o que eu precisava. Parece que reverteu apenas a operação 'adicionar', sem tocar no conteúdo do arquivo. Eu estava com medo de perder as alterações locais, como comentado nas respostas anteriores, mas parece que nenhum arquivo foi prejudicado.
— Peter M. - representa Monica

1

Para arquivos - svn revert filename

Para pastas - svn revert -R folder


4
Não! Reverter é inseguro, como ele perde todas as alterações locais
— jpaugh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.