Pregunta

No estoy muy seguro de cómo sucedió esto, pero de alguna manera una jerarquía de directorios completamente vacía terminó en mi repositorio:

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

Creo que lo que sucedió fue que estos directorios tenían archivos, pero luego un desarrollador se dio cuenta de que no debería haberlos registrado en primer lugar, ya que estos son subproductos del proceso de compilación, por lo que ella eliminó los archivos, pero de alguna manera los directorios vacíos se dejan en el repositorio como reliquias antiguas.

¿Cómo puedo eliminar esto de CVS? Los únicos resultados que parece poder encontrar en Google dicen que no debería ser necesario eliminar directorios vacíos, ya que CVS no los mantendrá cerca en primer lugar, y que el -P Las opciones (podar) de cvs update deberían eliminarlas del directorio de trabajo, lo que es una ayuda nula si realmente tiene directorios vacíos en su repositorio.

Un cvs remove y cvs commit no parece hacerse cargo de esta situación:

$ 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

¡Todavía está allí!

¿SVN también tiene este comportamiento extraño?

¿Fue útil?

Solución

AFAIK el protocolo CVS no permite eliminar directorios. Debes ir a la consola del servidor y eliminarlos del repositorio físico real.


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

  

No eliminas el directorio en sí;   no hay manera de hacerlo.

Otros consejos

La verificación y actualización de CVS siempre retirará los directorios vacíos; Así es como se construye el CVS. Haz una actualización con " -P " - " podar " - para eliminar directorios vacíos:

cvs update -dP

(Al agregar " -d " se actualizarán los nuevos directorios que han aparecido desde su última actualización; de lo contrario, CVS los ignorará).

Acabo de hacerlo

  1. rm -rvf / localCopy / project / emptyDirectory
  2. edit / localCopy / project / CVS / Entries, elimine la línea D / emptyDirectory ////, guarde el archivo
  3. rmdir -v / CVSROOT / project / emptyDirectory

para deshacerse de emptyDirectory en el proyecto. Admita que no es legítimo meterse con los datos internos de CVS, pero parece que ha funcionado (versión 1.12.13 de CVS).

CVS tiene una serie de fallas de diseño, nunca poder deshacerse de un directorio sin perder el historial es una. La dificultad para renombrar archivos y directorios sin perder el historial es otra.

Considere graduarse en Subversion . cvs2svn hace un muy buen trabajo al convertir repositorios, incluidas todas las ramas y etiquetas. Los conjuntos de comandos CVS y SVN son muy similares y requieren un ajuste mínimo. (Y para evitar que se convierta en un " qué control de versión debería usar " war) una vez que esté usando SVN, puede moverse a cualquier número de sistemas de control de versión más avanzados, como git o SVK .

Esto funcionó para mí. Básicamente cuando lo haces

rmdir -v / CVSROOT / project / emptyDirectory # Estamos eliminando el directorio del directorio de repositorios CVS.

Si tiene acceso de inicio de sesión al servidor Unix del repositorio, puede viajar a la ruta y eliminar el directorio, o plantear la misma inquietud con el equipo de Unix.

cvs tiende a funcionar en un enfoque de dos fases con respecto a los directorios, por eso hay una opción -P para que muchos comandos cvs & #; Prune directorios vacíos " ;.

Cuando esto haya sucedido, por ejemplo. quiero cambiar el nombre de un directorio que acabo de agregar, borro el directorio, borro la entrada del directorio en el archivo CVS / Entries, será una línea precedida con una " D " ;.

Trabajo hecho.

Si me he comprometido, me aseguro de que mi área de trabajo actual que contiene el directorio / s vacío esté bien registrada. Luego elimino la parte del área de trabajo a la que he agregado los directorios.

Por ejemplo, en

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

Me aseguro de que todo esté actualizado en los dos directorios que contienen las cosas que quiero mantener. Luego soplo mi_proyecto desde dentro de mi caja de arena.

Luego elimino los directorios vacíos del propio repositorio .

Volver y revisar la misma área de trabajo, por ejemplo, my_project me dará el área de trabajo sin las direcciones vacías.

O simplemente deje todo como está y use la opción -P para que CVS revise todo (o actualice todo), luego elimine los directorios vacíos.

HTH

saludos,

Rob

No puede eliminar el directorio de su área de trabajo, necesita eliminarlo para ir al servidor donde se guarda el repositorio real. pero puede eliminar archivos del directorio con el comando cvs remove.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top