Como remover um arquivo do controle de versão sem excluí-lo?

Respostas:

277

Você deseja a --keep-localopção de linha de comando. Isso remove o arquivo do controle de versão sem removê-lo do seu sistema de arquivos.

$ svn rm --keep-local my_important_file

Nota: O --keep-localúnico afeta o svn rmda sua cópia. Outros usuários podem ter sua própria cópia local do arquivo excluída, a menos que haja um conflito entre a cópia local e o repositório devido às alterações que eles fizeram. Este pode não ser o resultado desejado. Veja os comentários abaixo.

Andres Jaan Tack
fonte
4
Isso ainda não o excluirá dos sistemas de outras pessoas após a atualização?
Nyerguds
1
@ Nyerguds Isso está correto, pois o svn rm está removendo os arquivos do repositório. Caso deseje remover arquivos do repositório, mantenha-os localmente em sua máquina e use a bandeira acima.
22416 Greg Hilston
6
@ GregGilston Como eu disse, no entanto, isso não ajuda muito em projetos reais para múltiplos programadores. Deve haver uma maneira de unversion o arquivo em qualquer lugar. O caso mais comum aqui são arquivos de configurações locais confirmados acidentalmente (muito comuns em projetos Java), mas sua versão não deve limpar os arquivos de configurações de outros usuários.
Nyerguds
5
@GregHilston "projetos reais para múltiplos programadores" estava bastante implícito nos "sistemas de outras pessoas". O problema é este: outras pessoas atualizam e substituem as configurações. Isso geralmente não é muito problemático, mas irritante o suficiente para querer resolvê-lo. Mas, nesse ponto, quando eles já substituem as configurações e agora recebem um svn "rm" na atualização, na verdade, eles removem o arquivo de configurações locais potencialmente vitais do sistema, enquanto devem ser unversionados para que possam ser configurados como locais. configurações novamente.
Nyerguds
4
Recarregar um arquivo mais antigo do repositório o marca como sendo daquela versão mais antiga, o que significa que uma atualização simplesmente o excluirá novamente. Não há uma maneira limpa de fazer isso que não exija intervenção manual em todas as máquinas do projeto.
Nyerguds
13

Remover um arquivo do SVN sem excluí-lo localmente em nenhum lugar é um problema comum. Um exemplo de destaque é o arquivo .classpath em um projeto Eclipse. Colocar esse arquivo de configuração no SVN é maravilhoso, desde que todas as máquinas usadas no projeto tenham a mesma instalação do Eclipse e Java. Depois que essa condição é violada, as confirmações começam a interromper outros projetos Eclipse. Este é o ponto em que é necessário remover um arquivo do SVN sem excluir o ist em qualquer lugar.

svn rm --keep-local .classpath

faz o trabalho perfeitamente em uma máquina e nesse momento.

O problema é que outras máquinas podem perder esse arquivo (na atualização) ou ressuscitá-lo (na confirmação). A falha do SVN não é manipular --keep-localno repositório nem propagá-lo para outras cópias de trabalho. Portanto, em todas as outras máquinas acima, o comando deve ser executado - melhor antes de qualquer confirmação ou atualização.

Obviamente, isso funcionará 90%, na melhor das hipóteses. Exclusões e novas versões ocorrerão repentinamente. Minha solução é ter todas as máquinas às quais tenho acesso direto ou indireto,

svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine

É tão feio que dificilmente seja chamado de "solução". No entanto, sempre permitia reparos rápidos de acidentes posteriores.

Albrecht Weinert
fonte
-3

Não tenho uma resposta para essa pergunta precisa, mas tenho uma resposta para uma pergunta relacionada, que é como remover todos os arquivos (por exemplo, não um específico) em um diretório do controle de versão sem excluí-los localmente. Esta solução vem de uma implementação científica do Linux.

ls -a .svn

deve mostrar o diretório svn que armazena dados de controle. Simplesmente:

rm -r .svn

irá se livrar deste diretório. Então digitando:

svn status

produzirá um erro 'aviso: este diretório não é uma cópia de trabalho', porque não está mais sob controle de versão.

Eu espero que isso ajude.

cjames
fonte
Uma pergunta relacionada? Remover um arquivo e remover toda a cópia de trabalho são coisas totalmente diferentes do IMHO.
Melebius