2008-09-05 12 views
20

De alguna manera he logrado colocar un repositorio SVN en un estado incorrecto. Moví un directorio y ahora no puedo confirmarlo en su nueva ubicación.Directorios "Phantom" en un repositorio SVN

En lo que respecta a svn status, el directorio es desconocido (el nombre del directorio es type).

 
$ svn status 
?  type 

Cuando intento agregar el directorio, el servidor dice que ya existe.

 
$ svn add type 
svn: warning: 'type' is already under version control 

Si trato de actualizar el directorio, se va de nuevo.

 
$ svn update type 
svn: '.' is not under version control 

Si intento de cometerlo, el servidor se queja de que el directorio padre de edad, ya no existe.

 
$ svn commit type -m "Moving type" 
svn: Commit failed (details follow): 
svn: '/prior/trunk/src/nyu/prior/cvc3/theorem_prover/expression' path not found 

Para agregar al misterio, los contenidos del directorio están marcados como modificados.

 
$ svn status type 
A + type 
M + type/IntegerType.java 
M + type/BooleanType.java 
M + type/Type.java 
M + type/RationalRangeType.java 
M + type/RationalType.java 
M + type/IntegerRangeType.java 

Si trato de actualizar desde el directorio, obtengo esto.

 
$ cd type 
$ svn update 
svn: Two top-level reports with no target 

Cometer desde dentro del directorio da el mismo error path not found como anteriormente.

¿Qué está pasando y cómo lo soluciono?

EDIT: @Rob Oxspring me sorprendió: me volví demasiado agresivo moviendo cosas en Eclipse.

ACTUALIZACIÓN: Estoy aceptando la respuesta de @Rob Oxspring de "no hagas eso/solo comienza de nuevo" y sigue su consejo. Todavía estaría interesado si alguien pudiera decirme: (a) cuál es el mensaje de error anterior significa precisamente y (b) cómo realmente corregir el problema.

Respuesta

14

Me parece que type fue creado por algún comando de copia sensible a Subversion, luego se movió al directorio actual usando una copia de Subversion-inconsciente. En mi experiencia, este tipo de cosas normalmente ocurre cuando las operaciones de refactorización de paquetes se han encadenado juntas en Eclipse sin compromisos intermedios. Por lo general, Subversion no lo maneja bien cuando copia/mueve un archivo o carpeta copiado/movido localmente, aunque creo que la versión 1.5 puede manejarlo mejor.

Para evitar esto en el futuro, comprométese entre dichos pasos. Si desea ocultar las confirmaciones intermedias, le recomendaría hacer la refactorización de múltiples pasos en una rama y luego fusionar los cambios nuevamente en la línea principal en esa única confirmación que estaba buscando.

Si no es demasiado trabajo, entonces recomiendo volver a una copia de trabajo limpia y rehacer los cambios, confirmando después de cada paso. Si estás dispuesto a perder la historia, es decir, lo que permite la nueva IntegerType.java a no estar vinculado en absoluto a la edad IntegerType.java, entonces usted podría tomar el enfoque sugerido por BCS:

  • Mueva los archivos modificados en alguna ubicación temporal , excluyendo cualquier .svn directorios
  • actualización de su copia de trabajo en un estado de trabajo limpio
  • copiar sus cambios de nuevo a donde usted quiere que sea
  • cometer el trabajo de copia resultante
3

¿Comenzó simplemente copiando/moviendo el directorio con comandos del sistema operativo, o comenzó con material SVN? Si acaba de copiar los archivos a través del sistema operativo, aún tendría carpetas ocultas que contienen información SVN apuntando a la ubicación anterior.

+2

Gracias. Esta respuesta me hizo darme cuenta de lo que había hecho (aunque utilicé Eclipse para mover el directorio. Pensarías que Eclipse lo haría correctamente. Qué desastre limpiar, pero me pusiste en la dirección correcta. vida. – Marvo

9

La manera fácil de corregir muchos errores SVN es mover todo el directorio a través del SO, actualizar para obtener otra copia limpia y luego combinar todo lo que haya cambiado con alguna otra herramienta, WinMerge o similar.

Después de eso, puede hacer lo que esté tratando de hacer, pero hacerlo correctamente :).

0

Mi experiencia es que a veces la copia local no se sincroniza con el repositorio. Normalmente resuelvo esto yendo al árbol de directorios local, comenzando desde el directorio con el problema y tratando de hacer la limpieza y la actualización con cada paso.

1

Sugeriría, para eliminar (fuera de subversionso con rm o similar), el directorio de prueba anterior, y luego ejecutar svn update allí.

Es decir, si no desea obtener una copia de trabajo completamente nueva como otros han sugerido, que podría ser el enfoque más seguro.

0

Lo que sucedió es que hizo un pago de una carpeta, luego 'svn add'ed' y/o modificó algo en/en esta carpeta, pero antes de que haya confirmado sus cambios, la carpeta original se movió (o borró)) del repositorio SVN.

Todo lo que necesita hacer es cambiar su pago actual a la nueva ubicación en el repositorio SVN. Así, suponiendo que tiene una salida de la carpeta foo de ruta/a/carpeta1/foo, y que fue trasladado a foo ruta/a/foo, sólo tiene que ejecutar:

$ svn switch path/to/foo 

Eso es todo ... ;-)

+0

Esto suena razonable. Desafortunadamente, no tengo una copia de trabajo atada para probarlo en este momento ... ;-) –

1

Acabo de tener el mismo problema. Lo arreglé borrando la carpeta .svn de la carpeta afectada.

Cuestiones relacionadas