System plików podobny do UnionFS dla systemu Windows

12

Szukam czegoś, co działa jak UnionFS w Windows 7. Mój przypadek użycia: posiadanie czystego kodu roboczego katalogu w katalogu tylko do odczytu i kompilowanie go w unijnym systemie plików, który przechowywałby skompilowane pliki binarne logicznie w tym samym miejscu, ale fizycznie w inny katalog.

Biblioteki nie działają w ten sposób, mimo że zostały zaakceptowane jako odpowiedź w UnionFS, podobnie jak w systemie Windows, Wirtualnie scalają foldery - pokazują katalogi najwyższego poziomu tylko w jednym miejscu.

Sam kod jest ogromny (2 GB danych) i chciałbym uniknąć kopiowania go dla każdej kompilacji na moim serwerze kompilacji.

liori
źródło
Ojej. : - / Sam próbuję rozwiązać dokładnie ten sam problem i nie przeczytałem wystarczająco uważnie. Usunę mój komentarz. Nie mam praktycznie żadnej znajomości platformy Windows. : - /
Wszechobecny

Odpowiedzi:

2

Czy możesz użyć dowiązań symbolicznych, aby to sfałszować? http://en.wikipedia.org/wiki/NTFS_symbolic_link Nie odpowiada dokładnie na pytanie, ale myślę, że rozwiąże podany przypadek użycia.

MikeBaz - MSFT
źródło
Nie rozumiem, jak to mogło ... możesz wyjaśnić?
liori
Nie znam struktury drzewa kompilacji, ale zakładając, że jest to coś w rodzaju src, src / bin, src / obj, wtedy bin i obj mogą być symbolicznymi linkami do dowolnego miejsca w kodzie. Upewnij się tylko, że twoja kompilacja nie usuwa całkowicie tych folderów. Alternatywnie, src może być dowiązaniem symbolicznym do „tylko do odczytu”, a następnie cofnij linki w tylko do odczytu. Tak czy inaczej, powinieneś być w stanie sprawić, aby działało. Chyba że całkowicie brakuje mi twojego scenariusza.
MikeBaz - MSFT,
Nie kontroluję procedury kompilacji i może pisać wszędzie.
liori
@liori: w tym przypadku użycia można odtworzyć katalogi i utworzyć dowiązania symboliczne dla każdego pliku (coś w rodzaju cd SOURCE; find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +; find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;lub odpowiednika systemu Windows).
Gilles „SO- przestań być zły”
@Gilles: sprawiasz, że myślę, że kopiowanie nie jest złym rozwiązaniem ... (poza tym, czy potrafisz znaleźć odpowiedź?)
liori
2

Możesz stworzyć związek biedaka z symbolicznymi linkami: odtworzyć strukturę katalogów źródła, ale utworzyć linki (symboliczne lub twarde) dla plików. Powinno to być odpowiednie dla twojego celu, o ile system kompilacji nie próbuje modyfikować plików źródłowych.

Z GNU cp jest to tak proste jak cp -allub cp -as. Ale nie wiem, czy istnieje port narzędzi GNU, który rozumie łącza Windows.

Jeśli potrzebujesz wywołać polecenie mklink, możesz to zrobić za pomocą narzędzi POSIX (ostrzeżenie wpisane bezpośrednio w przeglądarce):

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

Podejrzewam, że istnieje natywny sposób Windows związany z Powershellem, ale nie mam pojęcia, jak to wygląda. Warto sprawdzić, czy Twoje drzewo katalogów jest duże, a dyski są szybkie, ponieważ rozwidlanie w systemie Windows jest zwykle powolne, a powyższe polecenia wymagają częstego rozwidlenia.

Gilles „SO- przestań być zły”
źródło
Natywny sposób byłby podobny do tego for /R %BUILDDIR% %F in (*.*) do @junction X:%pnxF %F, używając junctionnarzędzia z sysinternals.
MSalters
@MSalters Łącza symboliczne są teraz rodzime w systemie Windows. Złącza NTFS to nie to samo.
Nick Whaley,
@NickWhaley: Rzeczywiście, skrzyżowania są zasadniczo twardymi linkami.
MSalters
2

Tak, jest w najnowszych wersjach systemu Windows , ale nie wiem, jak go używać.

użytkownik541686
źródło
„UWF to nowa funkcja dla standardu 8 i nie jest dostępna jako część systemu Windows 8.” Jest mało prawdopodobne, że jest to dostępne w wersjach systemu Windows dla użytkowników końcowych.
Daniel B
Przydatne w innych przypadkach, ale nie w tym. Warto wiedzieć i warte odnotowania.
Robert Wm Ruedisueli,
1

Znalazłem to, ale tak naprawdę nie wiem, jak dobrze to działa:

Wszelaki
źródło
Projekty zarchiwizowane w Google Code nie są konserwowane. Możesz poszukać gdzieś zaktualizowanej wersji. Prawdopodobnie widelec.
Robert Wm Ruedisueli,