Pergunta

Há alguns anos, eu estou esperando por Subversion para caracterizar uma função "excluir permanentemente" (obliterar). Hesito em fazer a transição para Subversion (vindo do Visual SourceSafe: p), porque eu acho que essa é uma característica essencial, caso contrário, eu esperaria o repositório para crescer unstopably. No entanto, por um motivo ou outro, o recurso fica adiada uma e outra vez. Então eu começar perguntando se existe algum outro recurso ou solução alternativa que torna a função dispensável obliterar.

O que você faz quando você deseja reduzir o repositório central SVN?

Exemplo 1 : I em um grande biblioteca de terceiros , e depois de algumas semanas eu percebo que não é adequado para as minhas necessidades. Eu não quero que a loja e backup que grande quantidade de dados para sempre.

Exemplo 2 :. Eu tenho 10 versões de 10 grandes bibliotecas de terceiros no repositório, mas eu só usar as versões mais recentes

Exemplo 3 : eu acidentalmente check-in informações sensíveis (como sugerido por John ).

Exemplo 4 :. Eu acidentalmente verificado em alguns grandes arquivos que nunca foram feitos para ser colocado no repositório

Foi útil?

Solução

Há uma quantidade justa de discussão de svn obliterate no bilhete problema em o Apache local Subversion , a maior parte dele terminando cerca de 2008. parece haver consenso geral de que é um bom recurso para ter, embora a sua utilização devem ser raras.

Há duas razões principais para o querem.

Em primeiro lugar, o check-in informações confidenciais pode ser um problema. Deixá-lo lá dentro, excluídos, não é necessariamente uma opção, dependendo do nível de confidencialidade e exposição do repositório.

Em segundo lugar, o check-in uma grande quantidade de coisas que não devem ser verificadas no pode aumentar drasticamente o tamanho do repositório. O espaço em disco é geralmente barato hoje em dia, mas não é ilimitada, e há outras maneiras de espaço de arquivo pode importam. Se for necessário enviar um repositório através de uma conexão de rede, que é o tempo extra que pode ou não ser importante. Não pode haver vantagens reais para ser capaz de queimar um CD-ROM ou DVD-ROM que contém todo o repositório.

Portanto, é um recurso útil, que é feito atualmente pelo dumping, filtrando, e recarregar o repositório. Esta é propenso a erros de acordo com relatórios que eu vi, pode ser lento e exige o encerramento do repositório.

Obviamente, não é uma característica de alta prioridade para a equipe Subversion, dado que o que é necessário para muito poucos anos é alguém para fazer o trabalho para vir acima com um projeto e implementá-lo. Afinal de contas, isso deve ser feito muito raramente, e não há uma solução alternativa. No entanto, quem quiser fazer um monte de trabalho no Subversion poderia fornecer um patch que seria (se boa qualidade suficiente) provavelmente ser implementado.

Outras dicas

Ela viola o significado de controle de origem.
controle de origem é tudo sobre ser capaz de restaurar um estado anterior. Se você excluir um arquivo permanentemente você não será capaz de fazer.

OTOH eu não sei VSS assim que eu poderia ter entendido mal "excluir permanentemente"

A razão óbvia contra é porque os desenvolvedores acho que vai no balanço make SVN pior - a felicidade que sente em ser capaz de podar coisas necessárias-un será muito menor em relação a sua raiva quando algo você acidentalmente obliterar e seu / trunk vai faltar.

FogBugz tem exatamente o mesmo comportamento, e no seu caso é inteiramente pelo projeto creio eu, protegendo os usuários contra si mesmos.

Obliterate viola os princípios de controle de versão que você gostaria de ter. Ou você não iria salvar qualquer espaço, ou marcas anteriores iria tornar-se quebrado. Você não seria capaz de voltar a uma verdadeira versão anterior se tinha apagado qualquer arquivo.

Quanto ao seu comentário sobre o repositório crescendo ... Qualquer repositório vai crescer linearmente com o tamanho das mudanças ao longo do tempo. Esse é o ponto inteiro de um sistema de controle de origem. Se você não precisa de ser capaz de controlar as versões anteriores, então porque não se ater apenas a um lugar pasta compartilhada?

Subversion Obliterate, o recurso esquecido , existem três componentes para a questão, o problema , o razão e solução . Desde que você começou com a questão para a solução, eu vou começar com isso.

Solução

Como você percebeu, não há nenhuma grande solução. Especialmente se você está lidando com um grande repositório corporativo, já que a solução torna-se mais difícil quanto maior o repo recebe. Há um recurso chamado dump / filtro através que você pode limpar o seu repo de coisas que você não quer, mas não é tão fácil de usar, não rápido e não dependentes.

Houve um pequeno esforço (seguir o fio ) na equipe de svn para obter uma característica obliterar lá depois de 2008, mas o esforço teve uma morte silenciosa.

O problema

O artigo eu mencionei no início, na verdade, tem uma boa lista de casos de uso em que seria necessário um comando obliterar e na 516 fios questão os desenvolvedores realmente reconhecido o seu mérito.

Infelizmente, parece muito tarde para isso agora; a verdadeira razão que nunca foi adicionado mais tarde, era que agora quase impossível para implementá-lo, como ganchos para o código no nível mais fundamental (ver também pequeno esforço link sob Solution).

A partir da FAQ entrada :

As revisões são árvores imutáveis ??que constroem em cima uns dos outros. Remover uma revisão da história causaria um efeito dominó, criando o caos em todas as revisões subsequentes e possivelmente invalidar todas as cópias de trabalho.

A razão

O problema é que, originalmente, o recurso obliterar foi demitido como não foi conformar o princípio de controle de versão verdadeira.

Mais uma vez a partir do FAQ entrada :

Como faço para remover completamente um arquivo de história do repositório? Há casos especiais em que você pode querer destruir todas as provas de um arquivo ou cometer. (Talvez alguém comprometido acidentalmente um documento confidencial.) Isto não é tão fácil, porque Subversion é deliberadamente concebido para a informação nunca perder .

No entanto

Eu tenho trabalhado com SVN para um monte de clientes já com equipes maiores e projeto maior e, basicamente, nunca teve um problema real. Sim os casos de uso mencionado mandado uma característica obliterar, mas até agora eu não estou convencido de que este é um problema que você tem uma e outra vez em todos os lugares que você vá. Claro, a natureza desse problema particular é que você só tem que cometer um erro uma vez e não pode ser desfeita corretamente.

Como remover dados das quebras de repositório a premissa básica de controle de origem, que é que é possível reproduzir todos os estados anteriores e mudanças na árvore de origem. Se você quiser algo obliterar do controle de versão, você provavelmente está "Doing It Wrong", como dizem.

Eu uso vários sistemas de controle de versão para cerca de 15 anos agora e nunca precisei de um recurso como este.

Gostaria de saber quais são as razões que você quer esse recurso:

  • espaço em disco? Difícil de acreditar considerando o preço do espaço de disco
  • cometeu uma senha para controle de versão? Bem, isso vai te ensinar. Go e alterar a senha
  • velocidade do repositório? Não soa assim, mas se eu iria considerar um sistema completamente diferente, com supostamente melhor desempenho.

É possível reduzir o tamanho de um repositório SVN, fazendo um despejo e carga. Essencialmente, se você dizer que você nunca quer reverter para algo mais do que um par de anos de idade, é possível despejar o repositório, filtro com base no tempo, em seguida, recarregar o despejo. Querendo se livrar de um único arquivo devido ao tamanho é provavelmente uma indicação de que o arquivo realmente não pertencem a um sistema de controle de origem em primeiro lugar.

Há alguns scripts que ajuda a dados Obliterar. Siga esta discussão lista de tópicos para obter mais informações.

É uma maneira difícil de fazê-lo como a essência do controle de versão não é perda de dados, em vez de excluí-la permanentemente. Mas se você podar uma vez por ano ou algo parecido que pode ser feito.

Todo o ponto de controle de origem é ter uma história completa do que a sua aparência de repositório gosto. O comando obliterate derrota este fim de controle de origem, e é uma misfeature em todos os sistemas de controle de versão que têm-lo.

SVN tem cópia barata e ramificação barato que não requer uma cópia completa do arquivo - apenas os bits alterados. Seu repositório central é geralmente muito gerenciável em tamanho, tornando este misfeature desnecessário.

Obliterate não é uma característica essencial do Subversion, porque ele realmente quebra os princípios básicos de controle de versão (que é: para gravar toda a história).

E não é uma característica essencial porque há solução alternativa para conseguir este feito de qualquer maneira (usando svnadmin e filtragem).

Além disso, o recurso está actualmente muito trabalhado. Consulte este pós para detalhes.

A última vez que verifiquei foi concebido como um recurso ADMIN, e o administrador já pode despejar / filtro / broken_workaround e história remove qualquer maneira. Em relação à trilha de auditoria, isso não muda a citação atual. Seria torná-lo menos horrível, se algo absolutamente deve removido.

svnadmin obliterar é um dos recursos mais solicitados, o dev finalmente admitir isso deve existir (finalmente! Depois de 8 anos !!!). E a publicidade de não existente, está perseguindo os usuários longe de SVN.

Infelizmente eu tive que aprender sobre esta "característica ausente" da maneira mais difícil. Desde quando é funcionalidade básica de um recurso? Novos usuários estão começando a ouvir sobre isso e evitar SVN. Quanto a mim, eu agora usar Git.

não gosto minha opinião? Linus se refere aos desenvolvedores SVN como idiotas, e todo o sistema centralizado falho. Confio Linus como um verdadeiro perito e, especificamente, Ele sabe sobre fonte.

O que eu faço - não usar a subversão. Desculpe.

Eles (os desenvolvedores) obvoiously não concordo com a sua avaliação de que ser um recurso crítico. não impediu que o trabalho da empresa I a no momento de usá-lo;). Eu pessoalmente regra a subversão por esta razão exata

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