2012-07-11 28 views
5

Estoy pensando en la máscara como en un circuito de máscara (creo) - vamos a explicar con una práctica tabla¿Existe una máscara de sistema de archivos?

mask chart

La fuente común sería físicamente en c:\source

Instancia Una sería físicamente en c:\instanceA pero al principio no tienen nada, pero los enlaces simbólicos a todo en c:\source

Instancia B sería físicamente en c:\instanceB pero al principio no tienen nada, pero los enlaces simbólicos a todo en c:\source

Al realizar cambios en la Instancia A y la Instancia B, habría creado una máscara que ocultaría archivos de CommonSource si se eliminaron de las carpetas de Instancia y crearía un nuevo archivo físico en el directorio de instancia si un Común existente El archivo fuente fue modificado. Los archivos nuevos vivirían en las carpetas de instancias pero nunca volverían a la fuente común.

Este tipo de configuración sería muy útil para un proyecto en el que quisiera hacer muchos tipos diferentes de ajustes pequeños a instancias múltiples donde los subprocesos distintos funcionarían en distintas instancias.

Sé acerca de los enlaces simbólicos, pero se quedan cortos en el caso de modificar un archivo.

¿Hay algo que pueda lograr esto? Si no, ¿debería tratar de hacer esto y patentarlo? Me parece una buena idea.

Estaría en Windows Server 2008 o posterior.

+0

Para responder a su última pregunta, sobre patentes: * no *. –

+0

La verdadera pregunta es esta: ¿tiene algún problema con el tamaño de los datos o tiene algún problema con la administración de estas "instancias"? Una respuesta útil debe abordar estos aspectos. –

Respuesta

8

Temiendo que estoy diciendo lo obvio, pero git es una herramienta que se puede utilizar para lograr este comportamiento.

  1. Haga su "Fuente Común" un repositorio git
  2. Clonar el repositorio dos veces para "InstanceA" y "InstanceB"
  3. En cada caso, echa un vistazo a una nueva, única rama

Como los cambios se realizan en "Fuente común", puede fusionar esos cambios en "Instancia A" e "Instancia B" mientras mantiene la "MÁSCARA" (cambios en la rama) que ha creado para cada uno.

Esto tiene la ventaja adicional de permitir que cambia de "Fuente Común" para ser sacó como desee en lugar de tener cambios a "Común Fuente" empujado a cada instancia (algo que me imagino que será menos deseable y más propenso al error).

+0

Buen punto, pero cuando clono el repositorio, ¿no estoy haciendo copias físicas reales de los archivos en el sistema de archivos? – Matt

+0

Sí, 'InstanceA' y' InstanceB' comienzan como copias idénticas de 'Common Source' - el" link "es el repositorio de git, capaz de gestionar desviaciones de' Common Source' en cada instancia, al tiempo que permite cambios de 'Common Source 'para aparecer dentro de cada instancia * (cuando se combina con el uso de git) *. – deefour

+0

Puede lograr lo mismo con Subversion también y podría decirse que con mucha menos molestia. Lo único que agregaría es que para lograr el comportamiento que desea, debería verificar el repositorio en dos ubicaciones InstanceA e InstanceB y luego nunca actualizarlas o confirmarlas. Si realizó una Actualización, esa carpeta obtendrá todos los cambios de Común mientras conserva sus propios cambios y si realizó un Compromiso, retrasará sus cambios y los fusionará en los archivos en Común. –

1

Desde Windows 7 puede usar libraries, lo que le permitirá incluir archivos de más de una ubicación física.

Windows 7 también incluye el tipo de carpeta VirtualStore (por ejemplo, al crear o modificar un archivo en la carpeta Archivos de programa, realmente se creará en una carpeta específica del usuario: C: \ Users \ user \ AppData \ Local \ Tienda virtual.Sin embargo, no sé cómo puede crear este tipo de carpetas usted mismo y, hasta donde yo sé, puede agregar y modificar archivos, pero no eliminarlos de esa manera.

+0

Me sentí desgarrado con respecto a quién otorgaría la recompensa: si pudiera dividirla, habría obtenido 1/3 de ella, no podría, así que decidí dónde votó la comunidad. Gracias aunque – Matt

+0

Gracias @Matt. La comunidad tiene razón en que usar el control de origen tiene muchas ventajas, aunque esto no es lo que usted solicitó. Una buena solución sería una combinación de ambas ideas: un cliente de control de origen que tenga en cuenta el hecho de que las copias locales tienen mucho en común y sería inteligente para gestionar las similitudes y las diferencias en la forma de describir. –

1

Querrá un sistema de control de versiones compatible con la comprobación y los permisos de los archivos. Luego, solo necesita configurar un convertidor de API simple que tome los comandos del sistema de archivos y los convierta en comandos de control de versiones.

Eliminar -> desactivar el permiso para acceder al archivo.

Los comandos de directorio deben buscar copias locales y elementos a los que tiene permiso de acceso.

Abrir -> tomar copia local, en el archivo de salida fallida del repositorio.

Guardar -> desactivar el permiso, guardar copia local. // Evita que se vean duplicados.

Cerrar sin guardar -> si tiene permiso para acceder desde el repositorio, elimine la copia local.

((Por cierto, esta optimización de almacenamiento parece algo espuria del control de versiones. El espacio de disco es relativamente barato.

Si su interés no está en control de versiones, sugeriría mirar en la separación de la información que lo haría potencialmente quiere como volátil y crear archivos de configuración para cada rama. Esto, por supuesto, requiere un patrón predecible para los cambios.))

1

IBM Rational ClearCase es un sistema de control de versiones que tiene un comportamiento similar a la máscara de archivos. Se lo conoce como MVFS: Sistema de archivos MultiVersion y se puede montar en una estación de trabajo como una unidad de red común.

servidor ClearCase (también conocido como VOB) puede almacenar varias versiones del mismo archivo, cada una en diferentes ramas de código. Los conjuntos de archivos visibles por el usuario se llaman vistas. Cada vista tiene una configuración (también conocida como especificación de configuración), que define qué archivos y versiones son visibles para el usuario actual. archivo típico es el siguiente:

# From wikipedia: http://en.wikipedia.org/wiki/IBM_Rational_ClearCase#Configuration_specifications 
# Show all elements that are checked out to this view, regardless any other rules. 
element * CHECKEDOUT 

# For all files named 'somefile', regardless of location, always show the latest version 
# on the main branch. 
element .../somefile /main/LATEST 

# Use a specific version of a specific file. Note: This rule must appear before 
# the next rule to have any effect! 
element /vobs/project1/module1/a_header.h /main/proj_dev_branch/my_dev_branch1/14 

# For other files in the 'project1/module1' directory, show versions 
# labeled 'PROJ1_MOD2_LABEL_1'. Furthermore, don't allow any checkouts in this path. 
element /vobs/project1/module1/... PROJ1_MOD2_LABEL_1 -nocheckout 

# Show the 'ANOTHER_LABEL' version of all elements under the 'project1/module2' path. 
# If an element is checked out, then branch that element from the currently 
# visible version, and add it to the 'module2_dev_branch' branch. 
element /vobs/project1/module2/... ANOTHER_LABEL -mkbranch module2_dev_branch 
+0

Me sentí a quien adjudicar la recompensa: si pudiera dividirla, habría obtenido 1/3 de ella, no podría, así que decidí dónde votó la comunidad. Gracias aunque – Matt

+0

No hay problema :) Me alegra ayudar. –

2

Usted está buscando un union mount. Desafortunadamente, no conozco ninguna implementación para Windows, pero hay varias disponibles para Linux, notablemente UnionFS.

En general, se utilizan para hacer que un sistema de archivos de solo lectura se vea como de lectura y escritura: normalmente en CD en vivo.

+0

Me sentí inclinado a adjudicar la recompensa. Si pudiera dividirla, habría obtenido 1/3 de ella, no podría, así que decidí dónde votó la comunidad. Gracias aunque – Matt

Cuestiones relacionadas