2010-12-22 12 views
6

estoy totalmente confundido asumiendo que estoy en una copia de trabajo y hacer lo siguiente:SVN eliminar dolor de cabeza ¿Qué estoy haciendo mal?

svn mkdir trunk 
svn mkdir tags 
svn mkdir branches 
svn commit -m "added trunk branches and trunk" 
cd trunk 
touch a b c d e f g 
svn add a b c d e f g 
cd .. 
svn commit -m "added files" 
svn copy trunk tags/1.0 
svn commit -m "tagged 1.0" 

Ahora quiero borrar un archivo y etiquetar otra versión

svn delete trunk/e 
svn commit -m "deleted file e" 
svn copy trunk tags/1.1 
svn commit -m "created tag 1.1" 

me sale un mensaje de error similar a lo siguiente:

/svn/repos/banana/!svn/wrk/1f39512a-0e1e-11e0-9d1f-5be991158436/63885/tags/1.1/e' camino no encontró

¿Qué diablos estoy haciendo mal aquí?

Actualización:

He descubierto que si hago una actualización después de la SVN eliminar todo funciona bien. Me gustaría una explicación para este comportamiento.

+2

Una cosa para mencionar es que una vez que haya creado su troncal, etiquetas, ramas, no es una práctica común mantener una copia de trabajo de todo el repositorio, normalmente de una sola rama o el tronco en una copia de trabajo determinada. –

Respuesta

10

Aparentemente, este es un problema conocido con Subversion, cuando se trabaja con eliminaciones después de confirmaciones. Cuando confirma, su copia de trabajo se convierte en una copia de trabajo de revisión mixta, que no permite las confirmaciones de borrado.

Puede verificar esto ejecutando svnversion antes de realizar las actualizaciones/confirmaciones. Notará que la revisión mixta está marcada por una versión de copia de trabajo de algo así como "0: 4".

Desde la subversión best practices document:

directorios y archivos de su copia de trabajo pueden estar en diferentes "trabajo" revisiones: Esta es una característica deliberada que le permite mezclar y combinar las versiones anteriores de las cosas con las más nuevas. Pero hay algunos hechos que debe tener en cuenta:

  1. Después de cada confirmación svn, su copia de trabajo tiene revisiones mixtas. Las cosas que acaba de cometer ahora están en la revisión HEAD, y todo lo demás está en una revisión anterior.
  2. Ciertos compromete no están permitidos:
    • usted no puede comprometerse la eliminación de un archivo o directorio que no tiene una revisión de trabajo de la cabeza.
    • No puede asignar un cambio de propiedad a un directorio que no tiene una revisión de trabajo de HEAD.
  3. svn update traerá toda su copia de trabajo a una revisión en funcionamiento, y es la solución típica a los problemas mencionados en el punto # 2.

referencia libro: The limitation of mixed revisions.

Esto también se explica muy bien en este artículo sobre mixed revision working copies.

+0

Actualice sus referencias de SVN Book para utilizar la última versión (todas las noches) en lugar de una versión que tenga más de 6 años. ¡Gracias! – jgifford25

+0

Gracias, @ jgifford25! Hecho. – Avi

+0

lo siento, no tuve la oportunidad de otorgarle los 50 puntos completos. Estuve enfermo por unos días, muchas gracias. – ojblass

2

El mensaje de error también incluyó este

svn: Commit failed (details follow): 
svn: File '1.1/e' is out of date 

he encontrado que si hago una actualización de SVN antes de la copia a las etiquetas funciona

svn delete trunk/e 
svn commit -m "deleted file e" 
svn update 
svn copy trunk tags/1.1 
svn commit -m "created tag 1.1" 

y que funciona bien. Una explicación de este comportamiento sería apreciada.

+0

Esto fue un regalo del cielo. Si esto sucedió, use svn revert tags/yourtag, luego siga los pasos anteriores. – kontur

Cuestiones relacionadas