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.


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.


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.


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ć.


„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:


Projekty zarchiwizowane w Google Code nie są konserwowane. Możesz poszukać gdzieś zaktualizowanej wersji. Prawdopodobnie widelec.
Robert Wm Ruedisueli,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.