web-dev-qa-db-fra.com

Supprimer le répertoire vide de CVS?

Je ne sais pas trop comment cela s'est produit, mais d'une manière ou d'une autre, une hiérarchie de répertoires complètement vide s'est retrouvée dans mon référentiel:

com/
com/companyname/
com/companyname/blah/
com/Sun/
com/Sun/Java/
com/Sun/Java/jax_rpc_ri/

Je pense que ce qui s'est passé, c'est que ces répertoires contenaient des fichiers, mais un développeur s'est rendu compte qu'il n'aurait pas dû les archiver en premier car ce sont des sous-produits du processus de construction, il a donc supprimé le fichiers mais en quelque sorte les répertoires vides sont laissés dans le référentiel comme d'anciennes reliques.

Comment puis-je supprimer cela de CVS? Les seuls résultats que je semble pouvoir trouver sur google indiquent qu'il ne devrait pas être nécessaire de supprimer les répertoires vides car CVS ne les conservera pas en premier lieu, et que le -P (Élagage) des options à cvs update devrait les supprimer du répertoire de travail - ce qui ne sert à rien si vous avez réellement des répertoires vides dans votre référentiel.

UNE cvs remove et cvs commit ne semble pas s'occuper de cette situation:

$ 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

C'est toujours là!

SVN a-t-il aussi ce comportement étrange?

36
matt b

AFAIK le protocole CVS ne permet pas de supprimer les répertoires. Vous devez accéder à la console du serveur et les supprimer du véritable référentiel physique.


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

Vous ne supprimez pas le répertoire lui-même; il n'y a aucun moyen de le faire.

37
Jorge Ferreira

La vérification et la mise à jour de CVS vérifieront toujours les répertoires vides; c'est juste la façon dont CVS est construit. Faites une mise à jour avec "-P" - "Prune" - pour supprimer les répertoires vides:

cvs update -dP

(L'ajout de "-d" mettra à jour les nouveaux répertoires apparus depuis votre dernière mise à jour; sinon, CVS les ignorera.)

22
Commodore Jaeger

Juste fait

  1. rm -rvf/localCopy/project/emptyDirectory
  2. edit/localCopy/project/CVS/Entries, supprimer la ligne D/emptyDirectory ////, enregistrer le fichier
  3. rmdir -v/CVSROOT/project/emptyDirectory

se débarrasser de emptyDirectory dans le projet. Admettre qu'il n'est pas légitime de jouer avec les données CVS internes, mais semble avoir fonctionné (cvs version 1.12.13).

8

CVS a un certain nombre de défauts de conception, ne jamais pouvoir se débarrasser d'un répertoire sans perdre l'historique en est un. La difficulté à renommer des fichiers et des répertoires sans perdre l'historique en est une autre.

Envisagez de passer à Subversion . cvs2svn fait un très bon travail de conversion de référentiels incluant toutes les branches et balises. Les jeux de commandes CVS et SVN sont très similaires et nécessitent un ajustement minimal. (Et pour éviter que cela ne devienne une guerre "quel contrôle de version devriez-vous utiliser") une fois que vous utilisez SVN, vous pouvez passer à un certain nombre de systèmes de contrôle de version plus avancés tels que git ou SVK .

4
Schwern

Cela a fonctionné pour moi. Fondamentalement, quand vous le faites

rmdir -v/CVSROOT/project/emptyDirectory # Nous supprimons le répertoire du répertoire du référentiel CVS.

Si vous disposez d'un accès de connexion au serveur Unix du référentiel, vous pouvez vous rendre sur le chemin d'accès et supprimer le répertoire, ou soulever le même problème avec l'équipe Unix.

4
Pramod Jaiswal

Vous ne pouvez pas supprimer le répertoire de votre espace de travail, vous devez le supprimer du serveur où le véritable référentiel est conservé. mais vous pouvez supprimer des fichiers du répertoire avec la commande cvs remove.

1
SteveScm

cvs a tendance à fonctionner sur une approche en deux phases en ce qui concerne les répertoires, c'est pourquoi il existe une option -P pour de nombreuses commandes cvs pour "Élaguer les répertoires vides".

Lorsque cela s'est produit, par exemple je veux renommer un répertoire que je viens d'ajouter, je supprime le répertoire, supprime l'entrée du répertoire dans le fichier CVS/Entrées, ce sera une ligne précédée d'un "D".

Travail accompli.

Si je me suis engagé, je m'assure que ma zone de travail actuelle qui contient le/les répertoire (s) vide (s) est bien archivée. Ensuite, je supprime la partie de la zone de travail à laquelle j'ai ajouté les répertoires.

Par exemple, dans

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

Je m'assure que tout est à jour dans les deux répertoires contenant les éléments que je souhaite conserver. Je souffle ensuite mon_projet depuis mon bac à sable.

Ensuite, je supprime les répertoires vides du référentiel lui-même.

Revenir en arrière et vérifier la même zone de travail, par exemple mon_projet me donnera la zone de travail sans les répertoires vides.

Ou laissez tout simplement tel quel et utilisez l'option -P pour que CVS vérifie tout (ou mette à jour tout), puis élaguez les répertoires vides.

HTH

à votre santé,

Rob

1
Rob Wells