2011-04-14 22 views
10

Necesito reemplazar un directorio en mi repositorio SVN en el servidor de producción, pero no estoy seguro de la forma correcta de hacerlo sin romper nada. El directorio que se reemplaza es una revisión de un módulo de terceros que se ha reestructurado por completo, por lo que para poder realizar una actualización limpia, necesito eliminar el directorio o los archivos antiguos y reemplazarlos con el nuevo directorio y los archivos. Cuando hago esto (usando svn delete) la copia de trabajo se obstruye o en un estado que me impide confirmar o agregar el nuevo directorio no versionado a la copia de trabajo. He intentado svn update, svn cleanup, así como otros accesos directos de reparación de UI (TortoiseSVN y Cornerstone), pero parece que no puedo volver a sincronizar las cosas, es decir, sin retroceder a una revisión previa o revisar una nueva copia.Cómo reemplazar un directorio en un repositorio SVN sin romper nada

Creo que el directorio de destino tanto en la copia de trabajo local como en el repositorio remoto debe ser eliminado, la copia de trabajo actualizada, el nuevo directorio agregado a la copia de trabajo y luego confirmado en el repositorio; pero no estoy seguro de los detalles o de los pasos o sutilezas que me faltan. El módulo que estoy actualizando es bastante vital para la aplicación del sitio, por lo que debo hacerlo bien la primera vez, ya que esto se realiza en el servidor de producción, y debe hacerse rápidamente. Si alguien pudiera trazar los pasos claramente, realmente lo apreciaría.

Respuesta

9

Para hacerlo más fácil, puede hacerlo de manera que cree una única revisión "rota" donde el directorio no existe.

  1. svn up para obtener su copia de trabajo hasta la fecha
  2. svn delete <directory> para deshacerse del directorio actual
  3. svn commit -m 'Deleted old module'
  4. copia en el nuevo directorio para la copia de trabajo
  5. svn add <directory> para añadir su nueva estructura de directorios
  6. svn commit -m 'Added new module'

This question tiene detalles acerca de cómo usar "Ramas de proveedor", que puede ser una mejor solución para su situación.

+1

Gracias por el consejo, fue muy útil. De hecho, terminé con un flujo de trabajo revisado donde tuve que realizar mis compromisos para la producción desde una conexión de escritorio remoto a un servidor Win2K3, usando TortoiseSVN. TortoiseSVN tiene su propia versión empaquetada de SVN que tiene su propia implementación de línea de comando y sintaxis para automatización de scripting. Estar atrapado con sólo los comandos del menú contextual, me pareció más fácil de localizar la actualización por: 1. cd 2. eliminar contenido del directorio de destino raíz 3. SVN 4. copia los nuevos archivos de módulo/directorios 5. svn add 6. svn commit ¡Éxito! – davmorr

+0

No veo una razón por la que esto deba hacerse en 2 commits. Puede hacer esto en su copia de trabajo y confirmarlo como una operación única. SVN siempre lo verá como "eliminar" s + "agregar" s de todos modos, excepto para los archivos con el mismo nombre, los seleccionará como "reemplazados". – MarioDS

1

Si realmente necesita la estructura de directorios que se actualizará en un solo cometen, es posible utilizar WinMerge:

  1. comparar los dos árboles de forma recursiva, utilizando un filtro de SVN para evitar directorios comparing.svn
  2. Quitar los archivos y directorios que no existen en la nueva estructura de su WC
  3. Agregue los archivos y directorios que solo existen en la nueva estructura a su WC
  4. Reemplace todos los archivos que existen en ambas estructuras por los nuevos en tu WC
  5. cometer
+0

Su enfoque es cómo he hecho este tipo de actualizaciones sucesivas en el pasado, pero con estructuras de módulos fundamentalmente diferentes, prefiero comenzar con una nueva copia mediante delete -> replace -> commit en lugar de tener que eliminar selectivamente archivos y directorios que están en la ruta de actualización. La recomendación de @ Simon, con mi apéndice para TortoiseSVN, funcionó maravillosamente en esta capacidad. – davmorr

2

Es recta hacia adelante para hacer esto utilizando repobrowser de TortoiseSVN. Simplemente elimine la carpeta anterior y luego arrastre y suelte la nueva carpeta.

+0

Éste trabajó como un encanto. – Mino

Cuestiones relacionadas