Question

Je ne sais pas trop comment cela s'est passé, mais 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é est que ces répertoires contiennent des fichiers, mais un développeur a alors réalisé qu'il / elle n'aurait pas dû les archiver car ceux-ci sont des sous-produits du processus de construction. elle a supprimé les fichiers, mais les répertoires vides sont en quelque sorte laissés dans le référentiel sous forme d'anciennes reliques.

Comment puis-je supprimer cela de CVS? Les seuls résultats que je semble être capable de 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 -P Les options (élaguer) de cvs update doivent les supprimer du répertoire de travail, ce qui est une aide nulle si vous avez réellement des répertoires vides dans votre référentiel.

Une cvs remove et un cvs commit ne semblent pas prendre en charge 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

Il est toujours là!

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

Était-ce utile?

La solution

D’après le protocole CVS, il n’est pas possible de supprimer des répertoires. Vous devez accéder à la console du serveur et les supprimer du référentiel physique réel.

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.

Autres conseils

La vérification et la mise à jour de CVS extrairont toujours les répertoires vides; c'est comme ça que 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.)

Vient de faire

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

pour se débarrasser de emptyDirectory dans le projet. N'avouez pas le droit de manipuler les données internes du CVS, mais semble avoir fonctionné (version 1.12.13 du CVS).

CVS présente un certain nombre de défauts de conception: ne jamais pouvoir se débarrasser d’un répertoire sans perdre son historique en est un. Difficulté de renommer des fichiers et des répertoires sans perdre l’historique en est un autre.

Envisagez de passer à la Subversion . cvs2svn convertit très bien les référentiels, y compris toutes les branches et tous les tags. Les jeux de commandes CVS et SVN sont très similaires et nécessitent un ajustement minimal. (Et pour éviter que cela ne devienne un "contrôle de version à utiliser" dans war), une fois que vous utilisez SVN, vous pouvez passer à un nombre quelconque de systèmes de contrôle de version plus avancés tels que git ou SVK .

Cela a fonctionné pour moi. En gros, quand vous faites

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

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

cvs a tendance à fonctionner selon une approche en deux phases concernant les répertoires. C’est pourquoi il existe une option -P pour de nombreuses commandes cvs pour "Élaguer les répertoires vides".

Lorsque cela se produit, par ex. 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 / Entries, ce sera une ligne précédée d'un "D".

Travail terminé.

Si j'ai validé, je m'assure que ma zone de travail actuelle contenant le ou les répertoires vides 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 dans mon bac à sable.

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

Retour en arrière et vérification du même espace de travail, par exemple. my_project me donnera la zone de travail sans les répertoires vides.

Vous pouvez également tout laisser tel quel et utiliser l'option -P pour que CVS vérifie tout (ou tout mettre à jour), puis élaguez les répertoires vides.

HTH

acclamations,

Rob

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top