"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?

Lowgain
fonte

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

Julien Lebosquain
fonte
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.

Brian Lacy
fonte
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
bobah
fonte
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"
mud1e
fonte
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

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