Файлова система, схожа на UnionFS, для Windows


12

Я шукаю щось, що працює як UnionFS в Windows 7. Мій випадок: наявність робочого каталогу чистого коду в каталозі, доступному лише для читання, і компіляції у файловій системі об'єднання, яка зберігала б складені бінарні файли логічно там же, але фізично в інший каталог.

Бібліотеки не працюють таким чином, хоча вони були прийняті як відповідь у UnionFS так само на Windows, практично злиття папок - вони показують каталоги вищого рівня лише в одному місці.

Сам код величезний (2 Гб даних), і я хотів би уникати його копіювання для кожної збірки на моєму сервері збірки.


Ой, ой. : - / Я намагаюся вирішити саме таку проблему самостійно, і не читав майже уважно. Я видалю свій коментар. Я практично не знайомий з платформою Windows. : - /
всезначний

Відповіді:


2

Чи можете ви використовувати символічні посилання, щоб підробити це? http://en.wikipedia.org/wiki/NTFS_symbolic_link Це не відповідає точному питанню, але я думаю, що це вирішить вказаний вами випадок використання.


Я не бачу, як це могло ... ви могли б пояснити?
liori

Я не знаю, як структурується дерево вашої збірки, але якщо припустити, що це щось на зразок src, src / bin, src / obj, тоді ви можете мати bin та obj символічні посилання на те, де ви хочете, щоб код був. Просто переконайтесь, що ваша збірка не видаляє ці папки повністю. Альтернативно, щоб src був символічним посиланням на "тільки для читання", тоді посилання в режимі лише для читання повертаються назад. У будь-якому випадку ви повинні мати можливість змусити його працювати. Якщо я повністю пропускаю ваш сценарій.
MikeBaz - MSFT

Я не контролюю процедуру збирання, і вона може писати скрізь.
liori

@liori: для цього випадку використання ви можете відтворити каталоги та створити символічні посилання для кожного файлу (щось на зразок cd SOURCE; find -type d -exec sh -c 'cd BUILDDIR && mkdir "$@"' _ {} +; find -type f -exec sh -c 'mklink "$1" "BUILDDIR/$1"' _ {} \;або якийсь еквівалент Windows).
Жил 'ТАК - перестань бути злим'

@Gilles: ти змушуєш мене думати, що копіювання - це не таке погане рішення ... (до того ж, ти
зможеш

2

Ви можете зробити юнифони бідолахи з символічними посиланнями: відтворити структуру каталогів джерела, але створити посилання (символічні або жорсткі) для файлів. Це повинно відповідати вашим цілям, доки система збирання не намагатиметься змінювати вихідні файли.

З GNU cp це так просто, як cp -alабо cp -as. Але я не знаю, чи є порт інструментів GNU, який розуміє посилання на Windows.

Якщо вам потрібно викликати команду mklink, це можна зробити за допомогою інструментів POSIX (попередження, введене безпосередньо у браузер):

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

Я припускаю, що існує рідний спосіб Windows за участю Powershell, але я поняття не маю, як це виглядає. Можливо, варто вивчити, чи є дерево вашого каталогу великим, а ваші диски - швидкими, тому що розгортання під Windows має тенденцію повільно, а команди вище повинні розщедритися.


Народний спосіб був би чимось подібним for /R %BUILDDIR% %F in (*.*) do @junction X:%pnxF %F, використовуючи junctionінструмент від системних сімей.
MSalters

@MSalters Символічні посилання зараз є Windows. І переходи NTFS - це не одне і те ж.
Нік Уолі

@ NickWhaley: Дійсно, стики - це по суті важкі зв’язки.
MSalters

2

Так, є в останніх версіях Windows , але я не знаю, як ним користуватися.


"UWF - це нова функція для стандарту 8, і вона недоступна як частина Windows 8." Навряд чи це доступно у версії Windows для кінцевих користувачів.
Даніель Б


Корисно для інших випадків, але не для цього. Добре знати і варто зауважити.
Robert Wm Ruedisueli

1

Я знайшов це, але я не знаю, наскільки добре це працює:


Проекти, заархівовані за кодом Google, не підтримуються. Ви можете десь шукати оновлену версію. Можливо, виделка.
Robert Wm Ruedisueli
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.