Système de fichiers de type UnionFS pour Windows

12

Je cherche quelque chose qui fonctionne comme UnionFS dans Windows 7. Mon cas d'utilisation: avoir un répertoire de travail de code propre dans un répertoire en lecture seule, et le compiler dans un système de fichiers union qui stockerait logiquement les binaires compilés au même endroit, mais physiquement dans répertoire différent.

Les bibliothèques ne fonctionnent pas de cette façon, même si elles ont été acceptées comme réponse dans UnionFS sur les fenêtres, fusionnent virtuellement les dossiers - elles affichent uniquement les répertoires de niveau supérieur en un seul endroit.

Le code lui-même est énorme (2 Go de données), et j'aimerais éviter de le copier pour chaque build de mon serveur de build.

liori
la source
Oh, oups. : - / J'essaie de résoudre exactement le même problème moi-même, et je n'ai pas lu assez attentivement. Je vais supprimer mon commentaire. Je n'ai pratiquement aucune connaissance de la plate-forme Windows. : - /
Omnifarious

Réponses:

2

Pourriez-vous utiliser des liens symboliques pour simuler cela? http://en.wikipedia.org/wiki/NTFS_symbolic_link Cela ne répond pas à la question exacte mais je pense que cela résoudra le cas d'utilisation que vous avez donné.

MikeBaz - MSFT
la source
Je ne vois pas comment cela pourrait ... pourriez-vous expliquer?
liori
Je ne sais pas comment votre arbre de construction est structuré, mais en supposant que c'est quelque chose comme src, src / bin, src / obj, alors vous pouvez avoir bin et obj être des liens symboliques vers où vous voulez que le code soit. Assurez-vous simplement que votre build ne supprime pas complètement ces dossiers. Sinon, ayez src le lien symbolique vers le "lecture seule" puis faites revenir les liens en lecture seule. Dans tous les cas, vous devriez pouvoir le faire fonctionner. Sauf si je manque complètement votre scénario.
MikeBaz - MSFT
Je ne contrôle pas la procédure de génération et elle peut écrire partout.
liori
@liori: pour ce cas d'utilisation, vous pouvez reproduire les répertoires et créer des liens symboliques pour chaque fichier (quelque chose comme cd SOURCE; find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +; find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;ou un équivalent Windows).
Gilles 'SO- arrête d'être mal'
@ Gilles: vous me faites penser que la copie n'est pas une mauvaise solution ... (d'ailleurs, pourriez-vous en faire une réponse?)
liori
2

Vous pouvez faire des unionfs de pauvre avec des liens symboliques: reproduisez la structure du répertoire de la source, mais faites des liens (symboliques ou durs) pour les fichiers. Cela devrait convenir à votre objectif tant que le système de génération n'essaie pas de modifier les fichiers source.

Avec GNU cp, c'est aussi simple que cp -alou cp -as. Mais je ne sais pas s'il existe un port d'outils GNU qui comprend les liens Windows.

Si vous devez appeler la commande mklink, cela peut être fait avec les outils POSIX (avertissement, saisis directement dans le navigateur):

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

Je suppose qu'il existe une méthode Windows native impliquant Powershell, mais je n'ai aucune idée de son apparence. Il peut être utile de vérifier si votre arborescence de répertoires est grande et que vos disques sont rapides car le forking sous Windows a tendance à être lent et les commandes ci-dessus ont besoin de beaucoup bifurquer.

Gilles 'SO- arrête d'être méchant'
la source
La manière native serait quelque chose comme for /R %BUILDDIR% %F in (*.*) do @junction X:%pnxF %F, en utilisant l' junctionoutil de sysinternals.
MSalters
@MSalters Les liens symboliques sont désormais natifs de Windows. Et les jonctions NTFS ne sont pas la même chose.
Nick Whaley
@NickWhaley: En effet, les jonctions sont essentiellement des liens durs.
MSalters du
2

Oui, il existe dans les versions récentes de Windows , mais je ne sais pas comment l'utiliser.

user541686
la source
"UWF est une nouvelle fonctionnalité de Standard 8 et n'est pas disponible dans le cadre de Windows 8." Il est peu probable que cela soit disponible dans les versions Windows de l'utilisateur final.
Daniel B
Utile pour d'autres cas, mais pas celui-ci. Bon à savoir et à noter.
Robert Wm Ruedisueli
1

J'ai trouvé cela, mais je ne sais pas vraiment comment cela fonctionne:

Très varié
la source
Les projets archivés sur Google Code ne sont pas gérés. Vous voudrez peut-être chercher une version mise à jour quelque part. Peut-être une fourchette.
Robert Wm Ruedisueli