UnionFS-ähnliches Dateisystem für Windows

12

Ich suche nach etwas, das wie UnionFS in Windows 7 funktioniert. Mein Anwendungsfall: Arbeitsverzeichnis für sauberen Code in einem schreibgeschützten Verzeichnis und Kompilierung in einem Union-Dateisystem, in dem kompilierte Binärdateien logisch an derselben Stelle, aber physisch in gespeichert werden anderes Verzeichnis.

Bibliotheken funktionieren nicht auf diese Weise, obwohl sie unter Windows als Antwort in UnionFS gleichermaßen akzeptiert wurden. Ordner praktisch zusammenführen - sie zeigen nur Verzeichnisse der obersten Ebene an einer Stelle an.

Der Code selbst ist riesig (2 GB Daten) und ich möchte vermeiden, ihn für jeden Build in meinem Build-Server zu kopieren.

liori
quelle
Oh, hoppla. : - / Ich versuche genau das gleiche Problem selbst zu lösen und habe es nicht genau genug gelesen. Ich werde meinen Kommentar löschen. Ich bin mit der Windows-Plattform praktisch nicht vertraut. : - /
Omnifarious

Antworten:

2

Könnten Sie symbolische Links verwenden, um dies zu fälschen? http://en.wikipedia.org/wiki/NTFS_symbolic_link Es beantwortet nicht die genaue Frage, aber ich denke, es wird den von Ihnen angegebenen Anwendungsfall lösen.

MikeBaz - MSFT
quelle
Ich verstehe nicht, wie könnte es ... könnten Sie erklären?
Liori
Ich weiß nicht, wie Ihr Build-Baum aufgebaut ist, aber wenn es sich um src, src / bin, src / obj handelt, können bin und obj symbolische Links zu dem Code sein, an dem Sie sich befinden möchten. Stellen Sie einfach sicher, dass Ihr Build diese Ordner nicht vollständig löscht. Alternativ muss src die symbolische Verknüpfung zu "schreibgeschützt" sein, und die Verknüpfungen in schreibgeschützt müssen zurückgehen. In jedem Fall sollten Sie in der Lage sein, es zum Laufen zu bringen. Es sei denn, ich vermisse dein Szenario komplett.
MikeBaz - MSFT
Ich kontrolliere die Erstellungsprozedur nicht und sie kann überall schreiben.
Liori
@liori: Für diesen Anwendungsfall können Sie die Verzeichnisse reproduzieren und symbolische Links für jede Datei erstellen (so etwas wie cd SOURCE; find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +; find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;oder ein Windows-Äquivalent).
Gilles 'SO - hör auf böse zu sein'
@ Gilles: Sie lassen mich denken, dass das Kopieren keine so schlechte Lösung ist ... (
Außerdem
2

Sie können die Unionfs eines armen Mannes mit symbolischen Links erstellen: Reproduzieren Sie die Verzeichnisstruktur der Quelle, aber erstellen Sie Links (symbolisch oder hart) für die Dateien. Dies sollte für Ihren Zweck geeignet sein, solange das Build-System nicht versucht, Quelldateien zu ändern.

Mit GNU cp ist es so einfach wie cp -aloder cp -as. Ich weiß jedoch nicht, ob es einen Port von GNU-Tools gibt, der Windows-Links versteht.

Wenn Sie den Befehl mklink aufrufen müssen, können Sie dies mit POSIX-Tools tun (Warnung, direkt in den Browser eingegeben):

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

Ich nehme an, es gibt einen nativen Windows-Weg, an dem Powershell beteiligt ist, aber ich habe keine Ahnung, wie er aussieht. Es könnte sich lohnen zu untersuchen, ob Ihr Verzeichnisbaum groß und Ihre Festplatten schnell sind, da das Gabeln unter Windows in der Regel langsam ist und die oben genannten Befehle viel gespalten werden müssen.

Gilles 'SO - hör auf böse zu sein'
quelle
Der native Weg wäre so etwas wie das for /R %BUILDDIR% %F in (*.*) do @junction X:%pnxF %FVerwenden des junctionTools von sysinternals.
MSalters
@MSalters Symbolische Links sind jetzt in Windows integriert. Und NTFS-Junctions sind nicht dasselbe.
Nick Whaley
@ NickWhaley: In der Tat sind Kreuzungen im Wesentlichen harte Verbindungen.
MSalters
1

Ich habe das gefunden, aber ich weiß nicht wirklich, wie gut es funktioniert:

Allgegenwärtig
quelle
In Google Code archivierte Projekte werden nicht verwaltet. Vielleicht möchten Sie irgendwo nach einer aktualisierten Version suchen. Möglicherweise eine Gabel.
Robert Wm Ruedisueli