Pergunta

Eu não estou muito certo como isso aconteceu, mas de alguma forma uma hierarquia completamente vazio de diretórios acabou no meu repositório:

com/
com/companyname/
com/companyname/blah/
com/sun/
com/sun/java/
com/sun/java/jax_rpc_ri/

Eu acho que o que aconteceu foi que estes diretórios tinha arquivos neles, mas, em seguida, um desenvolvedor percebeu que ele / ela não deveria ter verificado-los em em primeiro lugar uma vez que estes são subprodutos do processo de criação, para que ele / ela removeu os arquivos, mas de alguma forma os diretórios vazios são deixados no repositório como relíquias antigas.

Como posso remover isto de CVS? Os únicos resultados que parecem ser capazes de encontrar no Google dizem que não deve haver uma necessidade para remover diretórios vazios como CVS não irá mantê-los em torno de, em primeiro lugar, e que os -P (ameixa) opções para cvs update deve remover -los do diretório de trabalho -. que é zero ajuda se você realmente tem diretórios vazios em seu repositório

A cvs remove e cvs commit não parece para cuidar dessa situação:

$ cvs remove -Rf com
cvs remove: Removing com
cvs remove: Removing com/companyname
cvs remove: Removing com/companyname/blah
cvs remove: Removing com/sun
cvs remove: Removing com/sun/java
cvs remove: Removing com/sun/java/jax_rpc_ri
$ cvs commit com
cvs commit: Examining com
cvs commit: Examining com/companyname
cvs commit: Examining com/companyname/blah
cvs commit: Examining com/sun
cvs commit: Examining com/sun/java
cvs commit: Examining com/sun/java/jax_rpc_ri
$ ls -l com
total 24
drwxrwxr-x  2 matt matt 4096 Oct 15 14:38 CVS
drwxrwxr-x  9 matt matt 4096 Oct 15 14:38 companyname
drwxrwxr-x  4 matt matt 4096 Oct 15 14:38 sun

Ele ainda está lá!

O SVN tem este comportamento estranho também?

Foi útil?

Solução

AFAIK o protocolo CVS não permite remover diretórios. Você deve ir para o console do servidor e removê-los a partir do repositório físico real.


http://www.network-theory.co.uk/ docs / cvsmanual / Removingdirectories.html

Você não remover o diretório em si; não há nenhuma maneira de fazer isso.

Outras dicas

CVS checkout e update irá sempre verificar diretórios vazios; Isso é apenas a maneira como CVS é ??construído. Fazer uma atualização com "P" - "ameixa" - para remover diretórios vazios:

cvs update -dP

(Adicionando "-d" irá atualizar novos diretórios que apareceram desde sua última atualização;. Caso contrário, CVS irá ignorá-los)

Apenas fez

  1. rm -rvf / localCopy / projecto / emptyDirectory
  2. Editar / localCopy / projecto / CVS / Entries, de exclusão linha D / emptyDirectory ////, salvar o arquivo
  3. rmdir -v / CVSROOT / projecto / emptyDirectory

para se livrar de emptyDirectory no projeto. Admita não legítimo para mexer com dados CVS internos, mas parece ter funcionado (cvs versão 1.12.13).

CVS tem uma série de falhas de projeto, nunca ser capaz de se livrar de um diretório sem perder a história é um. Dificuldade renomear arquivos e diretórios sem perder a história é outra.

Considere formar para Subversion . cvs2svn faz um trabalho muito bom converter repositórios, incluindo todos os ramos e tags. Os CVS e conjuntos de comandos SVN são muito semelhantes e requerem ajuste mínimo. (E a cabeça fora este se tornar um "controle de qual versão você deve usar" guerra) uma vez que você estiver usando SVN você pode mover para qualquer número de sistemas de controle de versão mais avançadas, como git ou SVK .

Isso funcionou para mim. Basicamente, quando você faz

rmdir -v / CVSROOT / projecto / emptyDirectory # Estamos a excluir diretório do CVS diretório do repositório.

Se você tiver acesso unix login do servidor repositório, você pode viajar para o caminho e pode excluir o diretório, ou aumentar a mesma preocupação com a equipe unix.

cvs tende a trabalhar numa abordagem em duas fases sobre diretórios é por isso que há uma opção -P para comandos muitos CVS para "diretórios vazios Prune".

Quando isso aconteceu, por exemplo, deseja renomear um diretório que acabou de adicionar, eu excluir o diretório, exclua a entrada para o diretório no arquivo CVS / Entries, vai ser uma linha prefixado com um "D".

feito Job.

Se eu cometi, eu certificar-se de minha área de trabalho atual que contém o diretório vazio / s é tudo o check-in. Então eu soprar a parte da área de trabalho que eu adicionei os diretórios a.

Por exemplo, em

~/Sandbox/my_project/some_stuff_i_want
~/Sandbox/my_project/empty_dir_1
~/Sandbox/my_project/other_stuff_i_want

I se certificar que tudo está atualizado em ambos os diretórios que contêm o material que eu quero manter. Eu, então, soprar my_project dentro da minha caixa de areia.

Então eu apagar os diretórios vazios a partir do próprio repositório .

Voltando e verificando a mesma área de trabalho, por exemplo, my_project vai me dar a área de trabalho sem os diretórios vazios.

Ou apenas deixar tudo como está e usar a opção -P para obter verificação CVS tudo para fora (ou atualizar tudo), então podar os diretórios vazios.

HTH

aplausos,

Rob

Você não pode diretório exclusão do seu espaço de trabalho, você precisa excluí-lo de ir ao servidor onde repositório real é mantido. mas você pode excluir arquivos do diretório com o comando cvs remove.

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