2009-09-23 21 views
6

Tengo una gran aplicación en un entorno de producción que estoy tratando de mover bajo el control de la versión. Entonces, creé un nuevo repositorio e importé la aplicación, menos varios directorios y archivos que no deberían estar bajo el control de la versión. Ahora, necesito hacer que la copia instalada sea un pago (pero aún conservo los archivos extra). En este punto, en una versión reciente de SVN, simplemente haría un checkout sobre el directorio existente usando la opción --force. Pero, por desgracia, tengo una versión antigua de SVN, desde antes, cuando se agregó la opción --force (y aún no se puede actualizar ... larga historia).Copiar los directorios .svn de un proceso de pago a un proceso sin pago para que sea un pago

Así que, comprobé la aplicación a otro directorio, y quiero simplemente copiar todos los directorios .svn en el directorio original, convirtiendo el original en un pago y dejando los archivos extra. Ahora, tal vez estoy teniendo un día difícil y me falta algo que está en el sitio, pero parece que no puedo resolverlo. Estos son los enfoques que he probado hasta ahora:

  1. uso rsync: Me parece que no puede golpear la combinación correcta de incluir y excluir directivas para capturar de forma recursiva todos los directorios .svn, pero nada más.

  2. Use cp: No puedo encontrar una buena manera de hacer que llegue a todos los directorios .svn a través de toda la aplicación.

  3. Usar find -exec cp: Tengo problemas con la parte principal de las rutas de acceso de los archivos encontrados que estropean las rutas de destino. Puedo excluirlo usando -printf '% P', pero eso no parece entrar en el {} reemplazo de exec.

  4. Usa find xargs to cp: Tengo problemas para encontrar el envío de directorios secundarios antes de enviar a mis padres. Desafortunadamente, find no tiene una opción de ancho de pulgada.

¿Alguna idea por ahí?

otra información:

  • fiesta 3.0.0.14
  • rsync 2.6.3 p28
  • cp 5.2.1
  • SVN 1.3.2
+0

Asegúrese de recordar establecer correctamente los permisos en las carpetas .svn, de lo contrario, puede ser un posible ataque de seguridad. Este sitio web explica el problema http://www.adamgotterer.com/2009/01/26/hacking-the-svn-directory/ – Joshua

Respuesta

6

Utilice tar y find para capturar los directorios .svn en un proceso de finalización de sesión limpio, luego desmarque en su aplicación.

cd /tmp/ 
svn co XXX 
cd XXX 
find . -name .svn -print0 | tar cf /tmp/XXX.tar --null -T - 
cd /to/your/app/ 
tar xf /tmp/XXX.tar 

Editar: conmutación de comando find/tar para usar NUL terminador para la robustez frente a los nombres de archivo que contienen espacios. El comando original fue:

tar cf /tmp/XXX.tar $(find . -name .svn) 
+0

Guau, no estaba al tanto de la sintaxis de $ (...) - Supongo que es una característica bash. Esto parece funcionar, excepto por un problema: se pierden los archivos/directorios que aparecen en el shell como varios tokens (como aquellos con espacios en el nombre). ¿Cómo puedo modificar el comando tar ... find para manejar estos nombres? Ejemplo de nombre de archivo: "6 - foo" Salida: $ tar cf ~/testsvn.tar \ '$ (Encontrar -nombre Svn.) \' tar:' ./6: No se puede stat : No existe ningún archivo o directorio tar: -: No se puede establecer: No existe tal archivo o directorio tar: el: No se puede: No existe tal archivo o directorio tar: foo: No se puede: No existe tal archivo o directorio –

+0

Disculpe por el desastre de un comentario: no se puede averiguar cómo forzar saltos de línea en los comentarios. –

+0

Sí, $ (...) es una función bash. Los espacios en los nombres de archivo son asquerosos. Probablemente desee utilizar algo como "find. -name .svn -print0 | tar cf /tmp/XXX.tar -T - --null". El -print0 le dice a find que use caracteres separadores NUL en lugar de newline. El -T- le dice a tar que lea los nombres de los archivos de stdin, y --null le dice a tar que use los caracteres separadores de NUL en lugar de las nuevas líneas. – bstpierre

0

(5) se puede' t simplemente haga un checkout a un directorio diferente, luego copie los archivos extra a ese directorio, verifique que todo esté bien antes de pasar a ejecutar la aplicación desde el nuevo directorio.

+0

Desafortunadamente, esta no es realmente una buena opción porque la lista de archivos adicionales cambia continuamente. la aplicación se ejecuta –