Sistema de archivos similar a UnionFS para Windows

12

Estoy buscando algo que funcione como UnionFS en Windows 7. Mi caso de uso: tener un directorio de trabajo de código limpio en un directorio de solo lectura y compilarlo en un sistema de archivos de unión que almacenaría los binarios compilados lógicamente en el mismo lugar, pero físicamente en directorio diferente

Las bibliotecas no funcionan de esta manera, a pesar de que fueron aceptadas como una respuesta en UnionFS por igual en Windows, virtualmente fusionan carpetas : solo muestran directorios de nivel superior en un solo lugar.

El código en sí es enorme (2 GB de datos), y me gustaría evitar copiarlo para cada compilación en mi servidor de compilación.

liori
fuente
Oh, vaya. : - / Estoy tratando de resolver exactamente el mismo problema, y ​​no leí con la suficiente atención. Eliminaré mi comentario. Prácticamente no estoy familiarizado con la plataforma Windows. : - /
Omnifarious

Respuestas:

2

¿Podrías usar enlaces simbólicos para fingir esto? http://en.wikipedia.org/wiki/NTFS_symbolic_link No responde la pregunta exacta, pero creo que resolverá el caso de uso que usted ha dado.

MikeBaz - MSFT
fuente
No veo cómo podría ... ¿podrías explicarlo?
liori
No sé cómo está estructurado su árbol de compilación, pero suponiendo que sea algo así como src, src / bin, src / obj, entonces puede hacer que bin y obj sean enlaces simbólicos a donde quiera que esté el código. Solo asegúrese de que su compilación no esté eliminando esas carpetas por completo. Alternativamente, haga que src sea el enlace simbólico al "solo lectura" y luego haga que los enlaces de solo lectura vuelvan atrás. De cualquier manera, deberías poder hacer que funcione. A menos que me esté perdiendo por completo tu escenario.
MikeBaz - MSFT
No controlo el procedimiento de compilación, y puede escribir en todas partes.
liori
@liori: para este caso de uso, puede reproducir los directorios y crear enlaces simbólicos para cada archivo (algo así cd SOURCE; find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +; find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;o algún equivalente de Windows).
Gilles 'SO- deja de ser malvado'
@Gilles: me haces pensar que copiar no es una mala solución ... (además, ¿podrías convertirlo en una respuesta?)
liori
2

Puede hacer unionfs de un hombre pobre con enlaces simbólicos: reproduzca la estructura de directorios de la fuente, pero cree enlaces (simbólicos o duros) para los archivos. Esto debería ser adecuado para su propósito siempre que el sistema de compilación no intente modificar los archivos fuente.

Con GNU cp, es tan fácil como cp -alo cp -as. Pero no sé si hay un puerto de herramientas GNU que entienda los enlaces de Windows.

Si necesita llamar al comando mklink, puede hacerlo con las herramientas POSIX (advertencia, escrita directamente en el navegador):

cd SOURCE
find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +
find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;

Supongo que hay una forma nativa de Windows que involucra Powershell, pero no tengo idea de cómo se ve. Puede valer la pena investigar si su árbol de directorios es grande y sus discos son rápidos porque la bifurcación en Windows tiende a ser lenta, y los comandos anteriores deben bifurcarse mucho.

Gilles 'SO- deja de ser malvado'
fuente
La forma nativa sería algo así como for /R %BUILDDIR% %F in (*.*) do @junction X:%pnxF %Fusar la junctionherramienta de sysinternals.
MSalters
@MSalters Los enlaces simbólicos son nativos de Windows ahora. Y las uniones NTFS no son lo mismo.
Nick Whaley
@NickWhaley: De hecho, los cruces son esencialmente enlaces duros.
MSalters
1

Encontré esto, pero realmente no sé qué tan bien funciona:

De todo género
fuente
Los proyectos archivados en Google Code no se mantienen. Es posible que desee buscar una versión actualizada en alguna parte. Posiblemente un tenedor.
Robert Wm Ruedisueli