Domanda

Non sono del tutto sicuro di come sia successo, ma in qualche modo una gerarchia di directory completamente vuota è finita nel mio repository:

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

Penso che sia successo che queste directory contenessero dei file, ma poi uno sviluppatore si è reso conto che non avrebbe dovuto controllarli in primo luogo poiché si tratta di sottoprodotti del processo di compilazione, quindi lui / ha rimosso i file ma in qualche modo le directory vuote vengono lasciate nel repository come antiche reliquie.

Come posso rimuoverlo dal CVS? Gli unici risultati che sembrano essere in grado di trovare su Google dicono che non dovrebbe esserci la necessità di rimuovere le directory vuote poiché CVS non le terrà in giro in primo luogo e che -P (potare) le opzioni per aggiornamento cvs dovrebbero rimuoverle dalla directory di lavoro - il che è di zero aiuto se in realtà hai directory vuote nel tuo repository.

Un cvs remove e cvs commit non sembra occuparsi di questa situazione:

$ 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

È ancora lì!

Anche SVN ha questo strano comportamento?

È stato utile?

Soluzione

AFAIK il protocollo CVS non consente di rimuovere le directory. Dovresti andare alla console del server e rimuoverli dal vero repository fisico.


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

  

Non rimuovi la directory stessa;   non c'è modo di farlo.

Altri suggerimenti

Il checkout e l'aggiornamento CVS controlleranno sempre le directory vuote; questo è solo il modo in cui CVS è costruito. Esegui un aggiornamento con " -P " - "prugna" - per rimuovere le directory vuote:

cvs update -dP

(L'aggiunta di " -d " aggiornerà le nuove directory che sono apparse dal tuo ultimo aggiornamento; altrimenti CVS le ignorerà.)

Appena fatto

  1. rm -rvf / localCopy / project / emptyDirectory
  2. modifica / localCopy / project / CVS / Entries, elimina la riga D / emptyDirectory ////, salva il file
  3. rmdir -v / CVSROOT / project / emptyDirectory

per sbarazzarsi di emptyDirectory nel progetto. Ammetti che non è legittimo scherzare con i dati CVS interni, ma sembra aver funzionato (versione cvs 1.12.13).

CVS ha una serie di difetti di progettazione, non essere mai in grado di sbarazzarsi di una directory senza perdere la cronologia. Un'altra difficoltà è quella di rinominare file e directory senza perdere la cronologia.

Valuta di passare a Subversion . cvs2svn fa un ottimo lavoro nel convertire i repository inclusi tutti i rami e i tag. I set di comandi CVS e SVN sono molto simili e richiedono una regolazione minima. (E per evitare che questo diventi un "controllo di versione che dovresti usare" guerra) una volta che usi SVN puoi passare a un numero qualsiasi di sistemi di controllo di versione più avanzati come git o SVK .

Questo ha funzionato per me. Fondamentalmente quando lo fai

rmdir -v / CVSROOT / project / emptyDirectory # Stiamo eliminando la directory dalla directory del repository CVS.

Se si dispone dell'accesso di accesso al server unix del repository, è possibile spostarsi sul percorso e cancellare la directory o sollevare la stessa preoccupazione con il team unix.

cvs tende a lavorare su un approccio in due fasi per quanto riguarda le directory, ecco perché esiste un'opzione -P per molti comandi cvs per " Elimina le directory vuote " ;.

Quando è successo, ad es. voglio rinominare una directory che ho appena aggiunto, elimino la directory, elimino la voce per la directory nel file CVS / Entries, sarà una riga preceduta da un " D " ;.

Lavoro svolto.

Se mi sono impegnato, mi assicuro che la mia attuale area di lavoro che contiene la / le directory / i vuota / e sia stata archiviata. Poi soffio via la parte dell'area di lavoro a cui ho aggiunto le directory.

Ad esempio, in

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

Mi assicuro che tutto sia aggiornato in entrambe le directory che contengono le cose che voglio conservare. Poi soffio via my_project dalla mia sandbox.

Quindi cancello le directory vuote dal repository stesso .

Tornare indietro e verificare la stessa area di lavoro, ad es. my_project mi darà l'area di lavoro senza le directory vuote.

O lascia tutto così com'è e usa l'opzione -P per fare in modo che CVS controlli tutto (o aggiorni tutto), quindi elimina le directory vuote.

HTH

applausi,

Rob

Non è possibile eliminare la directory dall'area di lavoro, è necessario eliminarla dal server in cui è conservato l'archivio effettivo. ma puoi eliminare i file dalla directory con il comando cvs remove.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top