2010-07-21 31 views
39

Tengo un problema que parece muy simple pero que es difícil de resolver. Obtengo el error mencionado después de eliminar un directorio. No encontré una solución aún para resolver el conflicto. Así es como ocurre:Error de compromiso de SVN: Directorio desactualizado

 
svn add dir 
svn add dir/file1 
svn commit 
svn add dir/file2 
svn commit 
svn delete dir 
svn commit 
--> commit failed 
--> Directory '/dir' is out of date 

La solución obvia 'svn update' no funciona. Después de la actualización de SVN una próxima confirmación falla con:

 
Commit failed 
Directory '/dir' remains in conflict. 

Mientras tanto he encontrado una solución, pero es un poco engorroso:

 
svn resolve --accept working dir 
svn commit --> still fails 
svn update 
svn commit --> still fails 
svn resolve --accept working dir 
svn commit --> NO PROBLEM! 

Dos preguntas: - ¿alguien puede explicar este comportamiento porque soy muy curioso al respecto - este problema ocurre en un script de Perl en una situación mucho más compleja. ¿Alguien puede darme una solución simple con 'factible' en el script de Perl?

Respuesta

58

Simplemente haga un svn update y luego su confirmación debería funcionar.

+2

se me adelantó. Y para agregar a eso, una actualización debe ser parte de su flujo de trabajo normal. Por lo general, me actualizo antes de commits. – hometoast

+0

Esa fue una de las soluciones obvias en las que pensé.Pero después de la actualización svn obtengo: svn commit -> '\ dir' permanece en conflicto –

+0

pero 'svn update' elimina los cambios en su directorio de trabajo, por lo que todo su trabajo será eliminado y nada más que confirmar. ¿Estoy en lo cierto? – VextoR

1

Sólo tiene que actualizar y luego comprometerse

+1

Esa fue una de las soluciones obvias en las que pensé. Pero después de la actualización svn obtengo: svn commit -> '\ dir' permanece en conflicto –

1

Ha intentado svn up dir antes de hacer cometer el final?

+1

Esa fue una de las soluciones obvias en las que pensé. Pero después de la actualización svn obtengo: svn commit -> '\ dir' permanece en conflicto –

57

Si entiendo la subversión correctamente, el problema es el siguiente:

Subversion seguimiento de la revisión actual para cada archivo y directorio por separado. Cada vez que se confirma un cambio en un archivo, la revisión del directorio padre cambia en el repositorio, pero su copia de trabajo todavía tiene el directorio en su revisión anterior.

Por lo tanto, en su escenario después de agregar el archivo, el directorio padre en el repositorio tiene una revisión más alta que su copia de trabajo. Cuando intenta eliminar el directorio que está trabajando en una versión desactualizada.

Para resolver:

hacen un svn update después de añadir el archivo, pero antes de eliminar el directorio.

En general, si no desea obtener los cambios de otra persona, puede restringir la actualización al directorio en sí: svn up --depth empty dir.

+0

Muchas gracias por eso, @Stephen Friedrich - solo quería apuntar que al hacer 'svn mv' de un directorio completo (que es lo que me trajo a esta publicación), el agregar y eliminar ocurre en un solo paso; y desafortunadamente parece que "hacer una actualización de svn después de agregar el archivo, pero antes de eliminar el directorio" no se puede aplicar en ese caso. Sin embargo, lo que funcionó para mí fue eliminar manualmente el directorio 'anterior' (con 'rm -rf') y luego confirmarlo nuevamente. ¡Aclamaciones! – sdaau

+0

Estaré encantado de votar esta respuesta para llevarlo a la cima. – Brandon

+0

@Stephen Friedrich, llama si estás cerca de Bérgamo, Italia, te debo una cena ... –

0

Para solucionar este problema utilicé 'svn revert' y luego realicé de nuevo el commit, que debería deshacerse del contenido en el 'svn delete' y luego volver a cometer. Tengo este problema tratando de cambiar el nombre de un directorio pero espero que esto funcione.

0

Realiza la actualización, la limpieza y luego confirma.

0

problema similar me encontré con espacio de trabajo fresca:

$ svn delete dir/file 
D   dir/file 
$ svn ci -m "comment1" 
Deleting  dir/file 
$ svn delete dir/ 
D   dir 
$ svn ci -m "comment2" 
Deleting  dir 
svn: Commit failed (details follow): 
svn: Item 'dir' is out of date 

para resolver el problema que re-actualiza las fuentes y utiliza 'eliminar URL' comando:

$ svn delete --force https://server/path.../dir 
$ svn update 
Cuestiones relacionadas