2009-02-11 21 views
35

¿Hay alguna manera de realizar un checkout de SVN (o exportar), que obtendría solo la estructura de directorios; es decir, ¿no hay archivos?SVN: Pagar/exportar solo la estructura de directorios

+0

Simplemente curioso, ¿por qué querrías hacer esto? – Tim

+1

@Tim: parece una buena forma de configurar la estructura de directorios para un nuevo proyecto, basado en un proyecto existente. – onnodb

+0

@onnodb: Sí, pero es por eso que debe tener plantillas listas para sus nuevos proyectos, solo exporte una plantilla y ya está listo. – mbillard

Respuesta

0

No puedo ver que hay una manera de hacerlo desde una breve mirada al svn help co. Algo que he hecho antes de actualizar un repositorio de una nueva versión de una biblioteca descargado (es decir, una rama de proveedor) es eliminar todo lo que no es una carpeta .svn:

#!/bin/sh 
find ./ -type f | grep -v .svn | xargs rm -f 

No es particularmente eficaz si estábamos tratando de evitar tener que verificar esos archivos en primer lugar, pero debería tener el mismo resultado.

+0

Espero que nadie ejecute por error este comando como root en/;-) – FerranB

+0

Si solo quiere el árbol sin los directorios .svn, use svn export en lugar de svn co. – jblocksom

+0

@FerranB definitivamente! –

4

SVN no puede hacer eso per se, pero si solo desea exportar la estructura de directorios, intente obtener svn ls -R --xml para obtener una lista XML de la estructura de directorios y luego vuelva a crearla a mano.

-1

No hay forma de hacer esto, y de hecho es algo un poco extraño querer hacer, ¡así que ahora tengo curiosidad!

esto puede no ser relevante, pero se puede prevenir los archivos que se comitted en primer lugar mediante la adición de un svn: ignore property en los directorios correspondientes. Esto es particularmente útil para evitar artefactos generados, como documentación o archivos de caché.

+0

Quiero replicar la estructura del directorio del repositorio en mi disco local y luego procesar más con otras herramientas (NAnt/MSBuild). svn: ignorar no es relevante. –

12
svn ls -R {svnrepo} | grep "/$" | xargs -n 1 mkdir -p 

Exportar, no pago.

[Actualizado]

Con la caja:

env REPO={repo} sh -c 'svn ls -R $REPO | grep "/\$" | xargs -n 1 svn co --depth=empty $REPO' 

Ésta será bastante lento para nada demasiado grande.

+0

¿Es posible hacer esto con un pago de SVN real? Quiero tener una copia de todos los directorios que están bajo el control de la versión (es decir: tengo una subcarpeta .svn en cada directorio, como si fuera a realizar "svn co --non-recursive" en cada carpeta). – DevNull

+0

Use esto en su lugar si tiene espacios en los nombres de las carpetas: svn ls -R {svnrepo} | grep "/ $" | xargs -I {} mkdir -p "{}" – architectonic

+0

funcionó bien para que yo pudiera comenzar con una copia de trabajo vacía: https://resbook.wordpress.com/2011/01/06/check-out-directory-in -svn-without-checking-out-the-content-of-directory/ –

9

Puede especificar - no recursivo al comando de finalización de la compra, puede ayudarlo a obtener lo que desea.

+0

No veo cómo esto podría ayudar. '--non-recursive', hace lo que dice: no se repite en el árbol. Así que esto solo le daría objetos de nivel superior, que no es lo que quiere el OP, a menos que tenga una estructura de directorio plana (un arbusto en lugar de un árbol). – SQB

4

Un uso para verificar solo la estructura del directorio es una solución parcial para no poder excluir la extracción de uno o más directorios. Se supone que el costo de simplemente consultar el árbol de directorios es insignificante en comparación con la verificación de la fuente completa. Con una estructura de directorios versionada desprotegida, podría usar la actualización de Subversion y sparse directories para seleccionar selectivamente qué árbol de directorios debería tener archivos.

1

en windows y con TortoiseSVN que puedes hacer Pago -> profundidad de la caja: solo este artículo. de esta manera puede obtener carpetas/archivos individuales. podrías reconstruir tu estructura de esta manera (usando el repobrowser). un poco engorroso, pero factible si la estructura de su directorio no es demasiado complicada. preferí esto en lugar de revisar miles de pequeños archivos (varios gigabytes) en una red lenta ...

+1

O en la misma pantalla, puede dejar 'Profundidad de comprobación 'como' Completamente recursivo' y en el botón de la derecha debajo del cuadro combinado, llamado 'Elegir elementos', puede desmarcar los archivos que no desea capturar. – Canella

1

Puede usar este script que listará los repos y creará la estructura en un directorio.

uso:perl checkout-structure.pl repos destdir

cesiones temporales no deben ser la raíz de los acuerdos de recompra, sino que también puede precisa un directorio.

No se pueden crear directorios que contengan caracteres acentuados (àéîùç ...), pero funciona bien con espacios. Para aquellos que tienen tiempo para eso, creo que es un problema de codificación.

checkout-structure.pl: forma

#!perl 

my @dirs; 
my $repos = shift; 
my $dest = shift; 

@dirs = grep { /\/$/ && /^[^\.]/ } `svn list -R $repos`; 

foreach(@dirs) { 
    s/\/$//; 
    chomp; 
    mkdir("$dest/$_") or warn $!." trying to create $dest/$_"; 
} 
1

Mi DotNet (LINQ) para hacer esto:

primer lugar, ejecute el comando svn list. Y empuje la salida a un archivo .xml.

"svn.exe" list "https://myserver.com:8443/svn/DotNet/src/v40Base/v40/" --recursive --username %USERNAME% --xml >>myfile.xml 

Y a continuación, ejecute algunos código LINQ contra el archivo .xml.

private static void FindSVNDirectories() 
    { 

     string fileName = @"C:\temp\myfile.xml"; 

     XDocument xDoc = XDocument.Load(fileName); 

     //XNamespace ns = XNamespace.Get("http://schemas.microsoft.com/developer/msbuild/2003"); 
     string ns = string.Empty; 

     //List of directories 
     var list1 = from list in xDoc.Descendants(ns + "list") 
        from item in list.Elements(ns + "entry") 
        where item.Attribute("kind").Value=="dir" 
        select new 
         { 
          mykind = item.Attribute("kind").Value, 
          myname = (item.Element(ns + "name").Value) 
         }; 

     StringBuilder sb = new StringBuilder(); 
     foreach (var v in list1) 
     { 
      sb.Append(v.ToString() + System.Environment.NewLine); 
     } 

     Console.WriteLine(sb.ToString()); 


    } 
2

Esto funciona perfectamente

svn ls | xargs svn up -N 

Y entonces, si usted quiere conseguir algunos de esos directorios totalmente desprotegido, ir dentro de ellos y utilizar

svn ls | xargs svn up 
2

sólo quería añadir, si necesita hacer esto desde el servidor (es decir, no revisar primero el repositorio), el equivalente a svn ls es svnlook tree --full-paths. Tuve que crear una copia de la estructura de carpetas de un repositorio de 50 GB y utilizar las sugerencias que encontré aquí para hacerlo sin tener que crear una copia de trabajo de todo el conjunto.

Mi código era:

svnlook tree /path/to/repo --full-paths | grep "/$" | grep -v "^/$" | xargs -I {} mkdir -p "{}"

El grep -v "^/$" porque la salida contenía un único (es decir, carpeta raíz del sistema de archivos)/y yo no quería perder el tiempo con eso.

Cuestiones relacionadas